攜程 最短路徑的代價

2022-05-11 04:40:04 字數 2213 閱讀 6641

攜程的一道圖論題

題意:給出一張無向圖 每條邊有乙個長度和 刪除該邊的權值  再給出起點和終點 求從起點到終點的最短路增加 要刪除的邊的最小的權值和。

【思路】要使 從起點到終點的最短路長度增加 就要把該最短路破壞掉  從起點到終點的最短路可能不止一條,我們可以把 這些路徑都找出來 重新構成乙個圖

再求這個圖的最小割 就是答案了    怎麼把這些路徑都找出來呢  求兩次最短路 第一次求 所有點到起點的最短路d1[x]  第二次求所有點到終點的最短               路 d2[x]    從起點到終點的最短路為ans 。再遍歷每一條邊 對於d1[u]+d2[v]+w[u][v]== ans 的邊就可以加入了~

還要改一點 先放這裡

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9

#define maxx 9999999

10using

namespace

std;

1112

struct e;

13struct node;

14 vector g1[1002

];15 vector g[1002

];16 vectoredge;

17int vis[1002],d1[1002],d2[1002],n,a[1002],p[1002],num[1002],cur[1002],d[1002

];18

19void add(int

from,int to,int

c)20

3031

void bfs(int s,int

t)3251}

52}53}

5455

int zg(int s,int

t)56

66 x=t;

67while(x!=s)

6873

return

a;74}75

76int maxflow(int s,int t,int

n)77

93int ok=0;94

for(i=cur[x];i)

95108

}109

if(ok==0

)110

119if(--num[d[x]]==0) break

;120 num[d[x]=m+1]++;

121 cur[x]=0;///

/!@#$%^^&

122if(x!=s)

123 x=edge[p[x]].from

;124

125}

126}

127return

flow;

128}

129130

131int spfa1(int s,int

t)132

156}

157}

158}

159return

d1[t];

160}

161int spfa2(int s,int

t)162

186}

187}

188}

189return

d2[t];

190}

191192

193int

main()

194206

edge.clear();

207while(m--)

208217

intans;

218 ans=spfa1(s,t);

219spfa2(t,s);

220//

printf("chang %d\n",ans);

221for(int i=1;i<=n;i++) //

構圖 求最大流

222for(int j=0;j)

223232

}233

//printf("***");

234//

printf("st %d %d\n",s,t);

235 printf("

ans %d\n

",maxflow(s,t,n));

236}

237return0;

238 }

攜程程式設計大賽決賽 1004 最短路徑的代價

這個題題意就不用說了,想了半天。思路就是把所有的最短路徑邊求出來,然後再以刪掉該邊的花費作為代價建圖,設立源點和匯點,求最大流即可。include include include includeusing namespace std const int maxn 2000 const int max...

有代價的單源最短路徑

問題 有代價的單源最短路徑,並要求儲存路徑。求最短的路徑,並使代價最小 特點 儲存路徑 決定了難以用dijkstra,可以用flody,用path i j 表示 i 想走到 j 邁出的第一步。假設k是 i j 的中間節點,更新時候用path i j path i k 具體做法見link。但是flod...

dp演算法之有代價的最短路徑

題目 有代價的最短路徑 題目介紹 如下圖所示,現在平面上有n個點,此時n 7,每個點可能和其他點相連,相連的線有一定權值,求出從0點到n 1點的消耗權值的最小值。分析 用動態規劃的思路來解決,每一點與其他點的消耗權值的最小值都儲存在乙個二維陣列中,下乙個點消耗的最小值可以根據前乙個點來得出。如果兩個...