HDU 2433 (最短路BFS 預處理)

2021-10-04 20:40:00 字數 1826 閱讀 3618

讀了個大概跑了個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點開始求最短路,因為在搜最小序列的時候要保證一定...