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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图论 —— 生成树 —— 最小瓶颈路

發(fā)布時間:2025/3/17 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图论 —— 生成树 —— 最小瓶颈路 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【概述】

最小瓶頸路是指:在一張無向圖上,對于點 u、v 找出從 u、v 的一條簡單路徑,使得路徑上行所有邊中最大值最小。

根據(jù)查詢次數(shù)不同,最小瓶頸路問題可分為單次查詢和多次查詢。

【單次查詢】

由于要求最大值最小,答案肯定處于所有邊中最小值和最大值之間,那么進(jìn)行二分在 check 的時候以二分值為基準(zhǔn)進(jìn)行 DFS,不經(jīng)過權(quán)值大于二分值的邊,如果能搜到終點,則說明二分值過大,如果不能搜到終點,則說明二分值過小。

struct Edge {int to;int dis; } edge[N]; int head[N],next[N]; int vis[N]; int n,m,start,endd; int tot,mid; void add_edge(int u,int v,int w) {//添邊tot++;edge[tot].to=v;edge[tot].dis=w;next[tot]=head[u];head[u]=tot; } bool dfs(int x) {//dfs搜索if(x==endd)return true;bool flag=false;vis[x]=1;for(int i=head[x]; i!=-1; i=next[i]) {int y=edge[i].to;int w=edge[i].dis;if(vis[y]||w>mid) {continue;}flag=flag|dfs(y);}return flag; } int main() {cin>>n>>m;//n個點m條邊cin>>start>>endd;//從start到enddint left=INF,right=-INF;memset(head,-1,sizeof(head));for(int i=1; i<=m; i++) {int u,v,w;scanf("%d%d%d",&u,&v,&w);left=min(left,w);right=max(right,w);add_edge(u,v,w);add_edge(v,u,w);}int ans;while(left<=right) {//二分答案mid=(left+right)>>1;memset(vis,0,sizeof(vis));if(dfs(start)) {ans=mid;right=mid-1;}else {left=mid+1;}}cout<<ans<<endl;return 0; }

【多次查詢】

由于最小瓶頸路可能有多條,那么無向圖最小生成樹中 u 到 v 的路徑一定是 u 到 v 的最小瓶頸路之一。

首先對無向圖求最小生成樹 MST,然后對于每個詢問 (u,v),利用倍增來回答 u 到 v 的路徑上的權(quán)值最大值。

struct Edge {int to;int dis; }edge[N]; int head[N],next[N]; int father[N],dep[N]; int G[1000][1000],maxx[1000][1000]; int n,m,q,root; int tot,num; void addEdge(int u,int v,int w) {tot++;edge[tot].to=v;edge[tot].dis=w;next[tot]=head[u];head[u]=tot; } int Find(int x) {return father[x]<0?x:father[x]=Find(father[x]); } void Union(int u,int v,int w) {int x=Find(u),y=Find(v);if(x==y)return;if(-father[x]>-father[y]) {father[x]+=father[y];father[y]=x;}else {father[y]+=father[x];father[x]=y;}addEdge(u,v,w);addEdge(v,u,w);num++; } void dfs(int x) {for(int i=head[x]; i!=-1; i=next[i]) {int y=edge[i].to;int w=edge[i].dis;if(y==G[x][0])continue;G[y][0]=x;maxx[y][0]=w;dep[y]=dep[x]+1;dfs(y);} } void init() {//對G進(jìn)行初始化for(int j=1; (1<<j)<=n; j++) {for(int i=1; i<=n; i++) {if(G[i][j-1]) {G[i][j]=G[G[i][j-1]][j-1];maxx[i][j]=max(maxx[i][j-1],maxx[G[i][j-1]][j-1]);}}} } int query(int x,int y) {//查詢從x到y(tǒng)的最小瓶頸路if(dep[x]<dep[y])swap(x,y);int temp=-INF;int t=(int)(log(dep[x])/log(2));for(int j=t; j>=0; j--) {if(dep[x]-(1<<j)>=dep[y]) {temp=max(temp,maxx[x][j]);x=G[x][j];}}if(x==y)return temp;for(int j=t; j>=0; j--) {if(G[x][j]&&G[x][j]!=G[y][j]) {temp=max(temp,max(maxx[x][j],maxx[y][j]));x=G[x][j];y=G[y][j];}}return max(temp,max(maxx[x][0],maxx[y][0])); } struct E{int u,v;int w;bool operator <(const E &rhs)const{//按邊權(quán)排序return w<rhs.w;} }e[N]; int main() {cin>>n>>m>>q;//n個點m條邊q次查詢for(int i=1; i<=m; i++)scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);sort(e+1,e+m+1);//按邊權(quán)排序memset(head,-1,sizeof(head));memset(father,-1,sizeof(father));for(int i=1; i<=m; i++) {//Kruskal求最小生成樹int u=e[i].u;int v=e[i].v;int w=e[i].w;Union(u,v,w);if(num>=n-1)break;}root=(1+n)>>1;dfs(root);//從根節(jié)點開始搜索init();for(int i=1; i<=q; i++) {int u,v;scanf("%d%d",&u,&v);printf("%d\n",query(u,v));}return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的图论 —— 生成树 —— 最小瓶颈路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 性xxxx | 国产资源在线免费观看 | 欧美日韩国产在线观看 | av福利院| 国产一区亚洲一区 | 亚洲成人久久久 | 91禁蘑菇在线看 | 中文字幕日韩视频 | 成人国产网站 | 94av视频| 少妇xxxx69 | 国产精品亚洲一区二区三区在线观看 | 久久精品美女视频 | 国产三区四区视频 | 国产私人影院 | 欧美jjzz| 2021av在线 | 欧美成在线视频 | 日韩欧美福利 | 欧美日韩国产在线 | 免费的av网站 | 丰满人妻一区二区三区免费视频 | 一区二三区| 成人 黄 色 免费播放 | 日本成人a | 熟女俱乐部一区二区视频在线 | 日韩欧美亚洲国产精品字幕久久久 | 啪啪网站免费观看 | 中文字幕亚洲一区二区三区五十路 | 二级毛片在线观看 | 牲欲强的熟妇农村老妇女视频 | 无码aⅴ精品一区二区三区 精品久久在线 | 中文字幕 欧美日韩 | 国产黄色网址在线观看 | 在线观看成人网 | 午夜精品久久久久久毛片 | 夜夜干夜夜 | 激情吧 | 久久加勒比 | 免费在线观看av | 熟女俱乐部一区二区视频在线 | 99ri精品| 午夜精品久久久久久久久久蜜桃 | 欧美少妇xx | 一区在线不卡 | 成人网导航 | 制服丝袜第二页 | 丁香五香天堂网 | 日韩精品极品视频在线观看免费 | 岛国片在线免费观看 | 青草青在线视频 | 亚洲不卡视频在线 | 樱桃国产成人精品视频 | 国产成人精品无码免费看在线 | 综合精品国产 | 四虎精品在线 | 免费毛片看 | 偷拍女澡堂一区二区三区 | 香港三级日本三级 | 在线看污片 | 特黄做受又粗又大又硬老头 | 四虎综合| 四虎影院在线视频 | 精品国产欧美一区二区 | 国产性自拍 | 亚洲成人欧美 | 天天做天天爱天天做 | 人人干人人做 | 91午夜视频 | 成片免费观看视频 | 成人深夜电影 | 91丨九色丨蝌蚪丨老版 | 精品人妻天天爽夜夜爽视频 | 日本女人毛片 | 超碰中文在线 | 欧美人和黑人牲交网站上线 | 都市激情男人天堂 | 女人特黄大aaaaaa大片 | av免费精品| 亚洲经典在线观看 | 人妻偷人精品一区二区三区 | 黄色片日韩 | 欧美大片免费高清观看 | 国产精品综合久久久 | 国产欧美精品一区 | 欧美日韩另类视频 | 黄色专区| 亚洲色图在线播放 | 一级α片免费看刺激高潮视频 | 久久久久国产精品人妻 | 国产自产一区二区 | 国产精品久久av无码一区二区 | 日日干日日摸 | 日韩一区在线视频 | 亚洲另类色图 | 69视频在线观看免费 | 办公室摸腿吻胸激情视频 | 亚洲午夜在线视频 | 亚洲高清久久久 |