【UOJ 276】无向图最小环
【題目描述】:
給定一張無(wú)向圖,求圖中一個(gè)至少包含 3個(gè)點(diǎn)的環(huán),環(huán)上的節(jié)點(diǎn)不重復(fù),并且環(huán)上的邊的長(zhǎng)度之和最小。該問(wèn)題稱為無(wú)向圖的最小環(huán)問(wèn)題。在本題中,你需要輸出最小環(huán)的邊權(quán)之和。若無(wú)解,輸出 “No solution.”。圖的節(jié)點(diǎn)數(shù)不超過(guò) 100。
【輸入描述】:
第一行兩個(gè)正整數(shù) n,m表示點(diǎn)數(shù)和邊數(shù)。
接下來(lái) m行,每行三個(gè)正整數(shù) x,y,z,表示節(jié)點(diǎn) x,y之間有一條長(zhǎng)度為 z的邊。
【輸出描述】:
輸出一個(gè)最小環(huán)的邊權(quán)之和。若無(wú)解,輸出 “No solution.”
【樣例輸入】:
5 7
1 4 1
1 3 300
3 1 10
1 2 16
2 3 100
2 5 15
5 3 20
【樣例輸出】:
61
【時(shí)間限制、數(shù)據(jù)范圍及描述】:
時(shí)間:1s 空間:512M
對(duì)于 20%的數(shù)據(jù):1<=n<=10;
對(duì)于100%的數(shù)據(jù):1<=n<=100;邊權(quán)<=300。
題解:emmm換了個(gè)oo,就從90變成100了哈哈。
代碼:
#include<bits/stdc++.h> #include<iostream> #include<algorithm> #include<queue> #include<cmath> #include<cstring> #include<cstdlib> #include<cstdio> using namespace std; const int N=105,oo=1<<28; int f[N][N],ans=oo,r[N][N],x,y,z,n,m; int main(){freopen("276.in","r",stdin);freopen("276.out","w",stdout);scanf("%d %d",&n,&m);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)f[i][j]=1<<28;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)r[i][j]=1<<28;for(int i=1;i<=m;i++){scanf("%d %d %d",&x,&y,&z);if(f[x][y]>z) f[x][y]=f[y][x]=r[x][y]=r[y][x]=z;}for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){ans=min(ans,r[i][k]+r[k][j]+f[i][j]);}}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)f[i][j]=min(f[i][j],f[i][k]+f[k][j]);}if(ans==oo) printf("No solution.");else printf("%d\n",ans);return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/wuhu-JJJ/p/11123485.html
總結(jié)
以上是生活随笔為你收集整理的【UOJ 276】无向图最小环的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++线程同步之事件(生产者与消费者问题
- 下一篇: 搭配购买