标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 21358 | Accepted: 7560 |
Description
Input
Output
Sample Input
2 3 3 1 2 1 2 3 2 3 1 3 4 4 1 2 2 2 3 2 3 4 2 4 1 2
Sample Output
3 Not Unique!
Source
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<string> #include<cmath> #include<algorithm> using namespace std; #define INF 1<<30 int n,m,a[110][110],low[110],vis[110],pre[110]; int maxx[110][110],connect[110][110],mst; int prime() { int minn,pos,fa,ans=0; vis[1]=1,pos=1; for(int i=1;i<=n;i++) if(i!=pos) { low[i]=a[pos][i]; pre[i]=pos; } for(int i=1;i<n;i++) { minn=INF; for(int j=1;j<=n;j++) { if(!vis[j]&&minn>low[j]) { pos=j; minn=low[j]; } } fa=pre[pos]; ans+=minn; vis[pos]=1; connect[fa][pos]=connect[pos][fa]=1; maxx[fa][pos]=maxx[pos][fa]=minn; for(int j=1;j<=n;j++) maxx[pos][j]=maxx[j][pos]=max(maxx[pos][fa],maxx[fa][j]); for(int j=1;j<=n;j++) { if(!vis[j]&&low[j]>a[pos][j]) { low[j]=a[pos][j]; pre[j]=pos; } } } return ans; } int main() { int tt; scanf("%d",&tt); while(tt--) { bool flag=false; memset(vis,0,sizeof(vis)); memset(connect,0,sizeof(connect)); memset(maxx,0,sizeof(maxx)); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]=INF; for(int i=1;i<=m;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); a[x][y]=z,a[y][x]=z; } mst=prime(); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(connect[i][j]||a[i][j]==INF) continue; if(a[i][j]==maxx[i][j]) { flag=true; break; } } if(flag) printf("Not Unique!\n"); else printf("%d\n",mst); } return 0; }
标签:
原文地址:http://www.cnblogs.com/a972290869/p/4228918.html