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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法提高课-图论-单源最短路的综合应用-AcWing 342. 道路与航线:最短路dijkstra、拓扑排序 、综合题、好题

發布時間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法提高课-图论-单源最短路的综合应用-AcWing 342. 道路与航线:最短路dijkstra、拓扑排序 、综合题、好题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目分析


來源:acwing

分析:
道路:雙向,邊權非負,
航線:單向,邊權可正可負,且無環。

根據題意,點可以分為很多團(連通塊),團內部只有道路(道路是雙向的,而且是連通的,所以不能存在航線,否則有環,矛盾);而航線是在團與團之間。航向滿足什么呢? 團與團之間的航線也是無環的,是滿足拓撲序的。所以,團與團之間是有向無環圖。

本題:

  • 如果邊權非負,可以用dijkstra算法。時間復雜度是O(mlogn)
  • 如果是拓撲圖,不管邊權是正是負,均可按拓撲序掃描,時間復雜度是線性的。
  • 思路是:先把每個團看成1個點,用拓撲序掃描來處理;然后對于每個團,內部使用dijkstra算。

  • 先讀入所有雙向道路,然后dfs所有連通塊,計算兩個數組:
    id[]:存儲每個點屬于哪個連通塊;
    vector< int> block[]:存儲每個連通塊里有哪些點
  • 輸入所有航線,同時統計出每個連通塊的入度。
  • 按照拓撲序依次處理每個連通塊。先將所有入度為0的連通塊的編號加入隊列。
  • 每次從隊頭取出一個連通塊的編號bid
  • 將該block[bid]中的所有點加入堆中,然后對堆中的所有點跑dijkstra算法。
  • 每次取出堆中距離最小的點ver。
  • 然后遍歷所有與ver相鄰的點j。
    如果id[ver] == id[j],如果j能被更新,則把j插入到堆中;
    如果id[ver] != id[j],則將id[j] 這個連通塊的入度-1,如果減到0,則將其插入到拓撲排序的隊列中。
  • ac代碼

    #include<bits/stdc++.h> #define x first #define y second using namespace std; typedef pair<int,int> PII; const int N = 25010, M = 150010; const int INF = 0x3f3f3f3f; int n, mr, mp, S; int h[N],e[M],w[M],ne[M],idx; int id[N]; //每個點屬于哪個連通塊 vector<int> block[N]; // 每個連通塊中有哪些點 int bcnt; // 連通塊的個數 int dist[N]; bool st[N]; int din[N];// 每個連通塊的入度queue<int> q;void add(int a, int b, int c){e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++; }// 把連通的點放到連通塊中 void dfs(int u, int bid){id[u] = bid; // u這點放到bid這個block中block[bid].push_back(u);// 遍歷連通的所有臨邊for(int i = h[u]; ~i; i = ne[i]){int j = e[i];if(!id[j]) dfs(j, bid); // 都放到bid這個連通塊中}}// 求每個連通塊內部的最短路 void dijkstra(int bid){priority_queue<PII, vector<PII>, greater<PII>> heap;for(auto ver : block[bid]) heap.push({dist[ver],ver});while(heap.size()){auto t = heap.top();heap.pop();int ver = t.y, distance = t.x;if(st[ver]) continue;st[ver] = true;for(int i = h[ver]; ~i; i = ne[i]){int j = e[i];if(dist[j] > dist[ver] + w[i]){dist[j] = dist[ver] + w[i];if(id[j] == id[ver]) heap.push({dist[j], j});}if(id[j] != id[ver] && -- din[id[j]] == 0)q.push(id[j]);}} }void topsort(){memset(dist, 0x3f, sizeof dist);dist[S] = 0;for(int i = 1; i <= bcnt; i ++){if(!din[i])q.push(i); // 把入度為零的連通塊加入隊列中}while(q.size()){int t = q.front();q.pop();dijkstra(t); //對編號為t的連通塊進行dijkstra}}int main(){cin >> n >> mr >> mp >> S;memset(h, -1, sizeof h);while(mr --){int a, b, c;scanf("%d%d%d", &a, &b, &c);add(a, b, c), add(b, a, c);}// 所有的點分類到不同的連通塊// 放在id[]數組中for(int i = 1; i <= n; i ++){if(!id[i])dfs(i, ++ bcnt); }// 讀入航線while(mp --){int a, b, c;scanf("%d%d%d",&a, &b, &c);add(a, b, c);din[id[b]] ++; // 后者所在連通塊的入度+1}topsort();for(int i = 1; i <= n; i ++)if(dist[i] > INF/ 2) puts("NO PATH");else printf("%d\n", dist[i]); }

    題目來源

    https://www.acwing.com/problem/content/344/

    總結

    以上是生活随笔為你收集整理的算法提高课-图论-单源最短路的综合应用-AcWing 342. 道路与航线:最短路dijkstra、拓扑排序 、综合题、好题的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 好吊妞操 | 日日操天天操 | 性色av网| 午夜做爰xxxⅹ性高湖视频美国 | av在线免费观看一区 | 午夜在线视频免费观看 | 96福利视频| 69av一区二区三区 | 日本裸体xx少妇18在线 | 亚洲欧美自拍视频 | 一区二区成人在线观看 | 国产成人精品无码播放 | 久久yy| jizz欧美性20| 日韩精品免费 | 老色批永久免费网站www | 少妇搡bbbb搡bbb搡澳门 | 自拍偷拍视频网站 | 日本黄色生活片 | 日本xxxx高清 | 中文字幕在线观看91 | 18禁一区二区 | 高潮久久久| 在线免费观看国产精品 | 告诉我真相俄剧在线观看 | 日韩精品人妻一区二区三区免费 | 中文字幕制服诱惑 | 性视频久久| h片网站在线观看 | 日韩国产欧美视频 | 欧美一级一级一级 | 久月婷婷 | aa黄色片 | 操碰视频在线 | 亚洲天堂最新 | 奇米影视一区二区三区 | 亚洲精品视频导航 | 色老板精品凹凸在线视频观看 | 大肉大捧一进一出好爽动态图 | 波多野结衣网站 | jizzjizz日本人 | 亚洲一区二区三区欧美 | 天天艹天天爽 | 亚洲一区二区视频在线播放 | 色播视频在线观看 | 少妇高潮久久久久久潘金莲 | 日韩激情文学 | 午夜一区在线 | 日韩人妻无码一区二区三区99 | 三点尽露的大尺度国产 | 欧亚一区二区三区 | 91av中文字幕| 无码 人妻 在线 视频 | 青青草av在线播放 | 老司机成人在线 | 看全黄大色黄大片美女人 | 免费大黄网站 | 久久av综合 | 国产无码精品久久久 | 一级二级在线观看 | 天天操免费视频 | 午夜视频在线免费播放 | 国产特级视频 | 潮喷失禁大喷水aⅴ无码 | 国产日韩精品在线观看 | 电影中文字幕 | 美女扒开尿口给男人桶 | 国产精品精品国产 | 欧美久久久一区二区三区 | 污视频网站在线 | a级片在线免费看 | 在线97 | 精品一二三区久久aaa片 | 欧美日韩视频在线播放 | 97在线视频人妻无码 | av免费播放| 一级一级黄色片 | 国产污网站 | 午夜欧美在线 | 亚洲精品在线免费 | 日韩三级小视频 | 日本人妻熟妇久久久久久 | 91九色国产视频 | 久草播放| www.欧美一区二区三区 | 婷婷国产在线 | 老司机午夜影院 | 羞羞漫画在线 | xxxwww黄色 | 大陆av片 | 69久久夜色精品国产69 | 中文字幕一区二区在线播放 | 国产性猛交╳xxx乱大交一区 | 嫩草在线观看视频 | av网站免费看 | av永久免费在线观看 | 超碰在线亚洲 | 黄色一及毛片 | 九草在线视频 |