POJ - 1679 - The Unique MST (检验最小生成 4000 树是否唯一)
2017-02-16 22:26
501 查看
POJ - 1679 - The Unique MST
检验最小生成树是否唯一
首先生成一个最小生成树,将他的所有边记录下来,然后每次单独删去其中一条边,若删去边后图联通且最小生成树的权值与没删去边时相等,那么不唯一。然后再放回。
检验最小生成树是否唯一
首先生成一个最小生成树,将他的所有边记录下来,然后每次单独删去其中一条边,若删去边后图联通且最小生成树的权值与没删去边时相等,那么不唯一。然后再放回。
#include<vector> #include<algorithm> #include<iostream> using namespace std; int father[1005]; int n,m; struct Edge { int u,v,w,id; Edge(){} Edge(int _u,int _v,int _w,int _id):u(_u),v(_v),w(_w),id(_id){} bool operator < (const Edge & r) const{ return w<r.w; } bool operator == (const Edge & r) const { if(id==r.id) return true; return false; } }; vector<Edge> e; vector<int> mst; int f(const int & x) { if(x==father[x]) return x; father[x]=f(father[x]); return father[x]; } void Union(int x,int y) { x=f(x);y=f(y); father[x]=y; } void init() { for(int i=1;i<=n;i++) father[i]=i; } int get_MST(int id) { init(); int res=0; for(int i=0;i<e.size();i++) { if(e[i].id==id) continue; if(f(e[i].u)!=f(e[i].v)) { res+=e[i].w; Union(e[i].u,e[i].v); } } return res; } bool iscon() { for(int i=2;i<=n;i++) { //cout<< f(i) << " " << f(i-1) << endl; if(f(i)!=f(i-1)) return false; } return true; } int main() { ios::sync_with_stdio(false);cin.tie(0); int T; cin>>T; while(T--) { mst.clear(); e.clear(); cin>>n>>m; int u,v,w; for(int i=0;i<m;i++) { cin>>u>>v>>w; e.push_back(Edge(u,v,w,i)); } sort(e.begin(),e.end()); int ans=0; init(); for(int i=0;i<e.size();i++) { if(f(e[i].u)!=f(e[i].v)) { ans+=e[i].w; mst.push_back(e[i].id); Union(e[i].u,e[i].v); } } bool flag=true; for(int i=0;i<mst.size();i++) { if(get_MST(mst[i])==ans&&iscon()) { flag=false; break; } } if(flag) cout << ans << endl; else cout << "Not Unique!" << endl; } return 0; }
相关文章推荐
- poj1679 The Unique MST ——判断最小生成树是否唯一_kruscal算法
- poj-1679 The Unique MST 判断最小生成树是否唯一
- POJ 1679 The Unique MST 判断最小生成树是否唯一
- POJ 1679 The Unique MST 【用次小生成树验证最小生成树是否唯一】
- poj 1679 The Unique MST 判断最小生成树是否唯一(图论)
- POJ 1679 The Unique MST(求最小生成树是否唯一)
- POJ 1679 The Unique MST(判断最小生成树是否唯一)
- poj-1679-The Unique MST-最小生成树是否唯一
- POJ 1679 The Unique MST(判断最小生成树是否唯一)
- poj 1679 The Unique MST (最小生成树是否唯一)
- poj1679.The Unique MST(最小生成树是否唯一)
- POJ 1679 The Unique MST(判断最小生成树是否唯一)
- POJ 1679 The Unique MST 判断最小生成树是否唯一
- POJ 1679 The Unique MST(判断最小生成树是否唯一)
- POJ1679 The Unique MST(判断最小生成树是否唯一)
- poj 1679 The Unique MST(判断最小生成树是否唯一)
- poj 1679 The Unique MST 判断最小生成树是否唯一 解题报告
- POJ 1679 The Unique MST (判断最小生成树是否唯一)
- poj 1679 The Unique MST (判断最小生成树是否唯一)
- poj 1679 The Unique MST (判断最小生成树是否唯一)