poj 1679 Prim 算法解决
2016-11-23 14:28
204 查看
//解析等有时间再写,欢迎关注啰 #include<iostream> #include<vector> #include<queue> #include<string> #include<sstream> #include<set> #include<map> using namespace std; int INF=65535; int edge[110][110]; int del[110][110]; int t,n,m; int used[110][110]; int Equal[110][110]; int first; int lowcost[110]; int nearvex[110]; int prim() { int i,j; for(i=1;i<=n;i++) { lowcost[i]=edge[i][1]; nearvex[i]=1; } lowcost[1]=-1; int weight=0; for(i=1;i<n;i++) { int v=-1; int min=INF; for(j=1;j<=n;j++) { if(lowcost[j]!=-1&&del[j][nearvex[j]]==1) continue; if(lowcost[j]!=-1&&lowcost[j]<min) { min=lowcost[j]; v=j; } } if(v==-1) return -1; lowcost[v]=-1; weight+=min; if(first) { used[v][nearvex[v]]=1; used[nearvex[v]][v]=1; } for(j=1;j<=n;j++) { if(lowcost[j]>edge[j][v]) { lowcost[j]=edge[j][v]; nearvex[j]=v; } } } return weight; } int main() { while(cin>>t) { while(t--) { map<int,int> value2index; cin>>n>>m; int i,j; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { edge[i][j]=INF; used[i][j]=0; del[j][i]=0; Equal[i][j]=0; } } vector<pair<int,int> > v[1000]; for(i=0;i<m;i++) { int x,y,w; cin>>x>>y>>w; edge[x][y]=edge[y][x]=w; pair<int,int> temp; temp.first=x; temp.second=y; v[w].push_back(temp); } first=1; int sumweight1,sumweight2; bool common=0; for(i=0;i<1000;i++) { if(v[i].size()<=1) continue; for(j=0;j<v[i].size();j++) { int x=v[i][j].first; int y=v[i][j].second; Equal[x][y]=1; Equal[y][x]=1; common=1; } } sumweight1=prim(); first=0; if(common) { bool flag=0; for(i=1;i<=n;i++) { for(j=i+1;j<=n;j++) { if(used[i][j]&&Equal[i][j]) { del[i][j]=1; del[j][i]=1; int temp=edge[i][j]; edge[i][j]=INF; edge[j][i]=INF; int sumweight2=prim(); if(sumweight1==sumweight2) { flag=1; break; } del[i][j]=0; del[j][i]=0; edge[i][j]=temp; edge[j][i]=temp; } } if(flag) { cout<<"Not Unique!"<<endl; break; } } if(!flag) cout<<sumweight1<<endl; } else { cout<<sumweight1<<endl; } } } system("pause"); return 0; }
相关文章推荐
- (算法)Tarjan离线算法解决LCA问题 (附POJ 1470 Closest Common Ancestors 代码)
- Highways - poj 2485 (Prim 算法)
- kuangbin专题六 POJ1679 The Unique MST(对次小生成树的理解,prim)
- poj 2075(prim 算法)
- POJ 1679 The Unique MST【MST是否唯一,Prime算法,最好的代码】
- Truck History - poj 1789 (Prim 算法)
- POJ 1679 The Unique MST (prim判断最小生成树是否唯一)
- 利用匈牙利算法&Hopcroft-Karp算法解决二分图中的最大二分匹配问题 例poj 1469 COURSES
- POJ - 1679 The Unique MST(Prim 次小生成树)
- POJ 1679----The Unique MST(prim)
- POJ 1679 The Unique MST(算法导论23-1次优最小生成树)
- POJ 1679 The Unique MST 次小生成树Prim
- poj 1679 Prim判断次短路
- poj 1087 A Plug of UNIX Dinic邻接表算法解决
- poj 1679 Prim判断次短路
- poj 1258 小白算法练习 Agri-Net 最小生成树 prim kruskal
- POJ 1258 Agri-Net 最小生成树 Prim 算法
- poj 1679 prim
- poj 题目1679 The Unique MST (最小生成树,次小生成树 prim)
- prim最小生成树算法题poj2485