日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SGU 185 Two shortest

發布時間:2024/8/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SGU 185 Two shortest 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SGU_185

? ? 這個題目被內存卡的嚴重頭暈……

? ? 其實思路還是滿直觀的,由于要兩條路不相交,只要用網絡流就行,再加上要兩條最短路,那么就最小費用最大流,最后看兩條路的費用和是不是最短路的兩倍即可。但如果裸著這樣寫,由于無向邊相當于兩條有向邊,不好意思,內存爆了……開小點吧,不好意思,RE了……

? ? 暈……那還是換網絡流寫吧,這樣少個記錄費用的數組,可以先用dij從1開始搞遍最短路,再從N開始搞遍最短路,再遍歷一遍所有邊就知道哪條邊是最短路上的邊了,而且還知道了這條邊的方向,那么根據這些最短路上的邊組成的圖做最大流就可以了,最后看總流量是不是為2。

? ? 當然敲到這里就發現了省內存的方法,只要先找到哪些邊是最短路上的邊,那么這些邊就會定向了,于是內存就可以剩一半了,這時候再用費用流就不會爆內存了,不過你寫著寫著就會發現,好像這個費用流要邊權沒啥用哦,因為費用是沒關系的,反正都是最短路上的邊。那就把費用設成0吧,算了,干脆不要費用這個數組了,于是最后寫著寫著,咦,又寫回網絡流了,不要費用的最小費用最大流算法不就是EK嘛=_=

? ? 不過值得一提的是,在輸出最終路徑時不能這樣:先做一遍最大流,把增廣路存下來,再做一遍最大流,再把增廣路存下來,然后輸出兩條增廣路。因為第二次的增廣路有可能走逆向邊的,也就是說相當于反悔之前的某個走法,這樣顯然就不對了,因為相當于這條邊沒有走但兩次增廣路中又都包含了這條邊。不過可以最后根據殘量網絡直接沿殘量為0的正向邊走到終點,順便把殘量置1,這樣走兩遍就輸出了那兩條路徑了。

#include<stdio.h> #include<string.h> #include<algorithm> #define MAXD 410 #define MAXM 160010 #define INF 0x3f3f3f3f int N, M, g[MAXD][MAXD], first[MAXD], e, next[MAXM], v[MAXM], flow[MAXM]; int S, T, q[MAXD], d[MAXD], work[MAXD], diss[MAXD], dist[MAXD], pre[MAXD]; void init() {int i, x, y, z;memset(g, 0x3f, sizeof(g));for(i = 0; i < M; i ++){scanf("%d%d%d", &x, &y, &z);g[x][y] = g[y][x] = z; } } void dij(int S, int T, int *dis) {int i, j, k, min;memset(dis, 0x3f, sizeof(diss[0]) * (N + 1));memset(d, 0, sizeof(d[0]) * (N + 1));dis[S] = 0;for(;;){min = INF;for(i = 1; i <= N; i ++) if(!d[i] && dis[i] < min) min = dis[k = i];if(min == INF) break;d[k] = 1;for(i = 1; i <= N; i ++) dis[i] = std::min(dis[i], dis[k] + g[k][i]);} } int bfs() {int i, j, rear = 0;memset(d, -1, sizeof(d[0]) * (N + 1));d[S] = 0, q[rear ++] = S;for(i = 0; i < rear; i ++)for(j = first[q[i]]; j != -1; j = next[j])if(flow[j] && d[v[j]] == -1){d[v[j]] = d[q[i]] + 1, q[rear ++] = v[j];if(v[j] == T) return 1; }return 0; } int dfs(int cur, int a) {if(cur == T) return a;for(int &i = work[cur]; i != -1; i = next[i])if(flow[i] && d[v[i]] == d[cur] + 1)if(int t = dfs(v[i], std::min(a, flow[i]))){flow[i] -= t, flow[i ^ 1] += t;return t; } return 0; } int dinic() {int ans = 0, t;while(bfs()){memcpy(work, first, sizeof(first[0]) * (N + 1));while(t = dfs(S, INF))ans += t;}return ans; } void add(int x, int y, int z) {v[e] = y, flow[e] = z;next[e] = first[x], first[x] = e ++; } void print() {int i, cur = 1;for(;;){if(cur == T){printf("%d\n", cur);return ; }printf("%d ", cur);for(i = first[cur]; i != -1; i = next[i])if((i & 1) == 0 && flow[i] == 0){flow[i] = 1, cur = v[i];break; }} } void solve() {int i, j;dij(1, N, diss), dij(N, 1, dist);if(diss[N] == INF){printf("No solution\n");return ; }memset(first, -1, sizeof(first[0]) * (N + 1)), e = 0;for(i = 1; i <= N; i ++)for(j = 1; j <= N; j ++)if(i != j && diss[i] + g[i][j] + dist[j] == diss[N])add(i, j, 1), add(j, i, 0);S = 0, T = N;add(S, 1, 2), add(1, S, 0);if(dinic() != 2)printf("No solution\n");elseprint(), print(); } int main() {while(scanf("%d%d", &N, &M) == 2){init();solve(); }return 0; }

轉載于:https://www.cnblogs.com/staginner/archive/2012/08/20/2647342.html

總結

以上是生活随笔為你收集整理的SGU 185 Two shortest的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人午夜福利视频 | 成人一区二区三区仙踪林 | 另一种灿烂生活 | 国内一区二区视频 | av福利在线免费观看 | 国产一区二区三区精品在线观看 | 色多多在线观看 | 四虎精品在永久在线观看 | 国产在线拍揄自揄拍 | 爱的色放3 | 国产精品久久一区二区三区 | 国产又粗又硬视频 | 看a网站| 毛片无遮挡高清免费观看 | 日韩天堂一区 | 中文在线观看免费高清 | 欧美日韩高清丝袜 | 天堂久久av | 国产精品一区二三区 | 97日韩精品 | 女人性高潮视频 | 国产美女无遮挡永久免费观看 | 国产中文字幕乱人伦在线观看 | 成人av高清在线观看 | 免费大片在线观看www | 久久99精品久久久久久 | 久久在线观看 | 探花国产精品一区二区 | 超碰在线中文字幕 | 91免费看.| 中文字幕国产在线 | 精品一区二区三区四区视频 | 国产精品日韩av | 香蕉视频网站 | av资源首页 | 爆操白虎| 武侠古典av | 色妇网 | 男人的天堂手机在线 | 国产成人精品a视频 | 91网站大全 | 中文字幕手机在线视频 | 中文字幕看片 | 六月丁香激情综合 | 中文字幕人成 | 国产精品久久久久久久久免费软件 | 在线看片中文字幕 | 伊人超碰| 136福利视频导航 | 亚洲 欧美 日韩 综合 | 91成人综合 | 黄色成人av | 老头把女人躁得呻吟 | 亚洲一区二区三区四区不卡 | 欧美在线一区二区三区四区 | 成人啪啪 | 伊人一二三 | 福利网址在线 | 欧美日韩免费观看视频 | 99re这里只有精品在线 | 亚洲狼人av | 在线看黄色的网站 | 亚洲欧美中文字幕 | 91免费网站入口 | 亚洲性xxxx| 91精品国产高清91久久久久久 | 中文精品视频 | 青青草成人影视 | 肉色欧美久久久久久久免费看 | 国产精品久久久久久久久毛片 | 99视频久 | 精品美女在线观看 | 国产精品一区二区视频 | 美女裸体网站久久久 | 韩国明星乱淫(高h)小说 | 国产麻豆天美果冻无码视频 | 免费的黄色的视频 | 欧美日韩国产精品成人 | 日本免费一区二区三区四区五六区 | 97精品熟女少妇一区二区三区 | 日本精品少妇 | 国产呦小j女精品视频 | 丰满孕妇性春猛交xx大陆 | 精品福利影院 | 亚洲日本中文 | 亚洲成人免费影院 | 欧色av | 国产精欧美一区二区三区蓝颜男同 | 丰满少妇被猛烈进入 | 老头把女人躁得呻吟 | 黄色资源网站 | 男女污网站| 性视频久久 | 97自拍偷拍视频 | 久久夜夜操 | 99视频导航 | 欧美日韩一区二区三区不卡 | 美女视频在线观看免费 | 在线观看日本一区 |