讀了個大概跑了個nm2;
邊權相等——bfs
這個題暴力nm2,得優化,是n還是m,會發現每次刪邊,刪的是最短路徑的邊,就不用跑bfs,不是,就跑bfs,
預處理:nm
不刪邊:nm(列舉)
刪邊:n2*m
//#pragma gcc optimize(2)
#include
//typedef long long ll;
#define ull unsigned long long
#define int long long
#define f first
#define s second
#define endl "\n"
//<#define eps 1e-6
#define base 131
#define lowbit(x) (x&(-x))
#define pi acos(-1.0)
#define inf 0x3f3f3f3f
#define maxn 0x7fffffff
#define inf 0x3f3f3f3f3f3f3f3f
#define pa pair
#define ferma(a,b) pow(a,b-2)
#define pb push_back
#define all(x) x.begin(),x.end()
#define memset(a,b) memset(a,b,sizeof(a));
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using
namespace std;
void
file()
const
int n=
1e2+5;
const
int m=
3e3+5;
int dis[n]
,vis[n]
,dp[n]
[m],sum[m]
;int n,m;
vectorint,
int>
>vec,g[n]
;int
bfs(
int s,
int flag)
}return
(cnt==n-
1?temp:-1
);}signed
main()
);g[vec[i]
.s].pb(
);}int ans=
0,flag=1;
for(
int i=
1;i<=n;i++
)for
(int i=
0;i)int temp=ans,flag=1;
for(
int j=
1;j<=n;j++
) temp=temp-sum[j]
+num;}}
if(flag)
cout
cout<<
"inf"
<}for
(int i=
1;i<=n;i++
) g[i]
.clear()
;}return0;
}
HDU 2433 Travel 最短路樹
題意 給乙個n個點m條邊的無向圖 分別刪除每條邊 問刪除後的新圖中 分別以每個點為原點 到其它點的最短距離之和 圖不連通時輸出inf 思路 如果對於每一條邊刪除後都做n次最短路 則時間複雜度為o m n m log n 時間複雜度太高 仔細分析一下不難發現 只有刪除的邊是最短路樹上的邊 各點之間的最...
HDU 2433 Travel 最短路應用
題意 有n個點,m條邊,求依次刪除每一條邊後所有兩點之間的最短路徑的和。思路 先以每乙個頂點為源點求一遍最短路,這樣就形成了n個最短路樹,第i個樹的邊權和為sum i 然後列舉刪除每乙個邊,分別以邊上兩點u v為源點求最短路,如果u v的距離發生變化,則以u為源點時,v節點下的子樹的dis i 都會...
hdu 3760 2次bfs求最短路)
思路 首先是建反圖,從點n開始做spfa求出n到各點的最短路,然後從1點開始搜最小序列,對於邊 u,v 若dist u dist v 1,則要將當前的序號加入當前佇列中,然後就是對於那些序號相同點的都要加入當前佇列,還要判一下重。至於為什麼要建反圖從n點開始求最短路,因為在搜最小序列的時候要保證一定...