poj 1679 The Unique MST
2015-07-21 13:40
288 查看
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct data { int u,v,w; int same; int use; int del; }e[10000+5]; int n,m,bin[1000+5],f; bool cmp(data a,data b) { return a.w<b.w; } int Find(int x) { int s; for(s=x;bin[s]>=0;s=bin[s]); while(s!=x) { int t=bin[x]; bin[x]=s; x=t; } return s; } void Union(int x1,int x2) { int f1=Find(x1),f2=Find(x2); int t=bin[f1]+bin[f2]; if(bin[f1]>bin[f2]) { bin[f1]=f2; bin[f2]=t; } else { bin[f2]=f1; bin[f1]=t; } } int kruskal() { int i,num=0,u,v,ans=0; for(i=0;i<=n+5;i++) bin[i]=-1; for(i=0;i<m;i++) { //printf("%d\n",i); if(e[i].del==1) continue; u=e[i].u; v=e[i].v; if(Find(u)!=Find(v)) { Union(u,v); num++; ans+=e[i].w; if(f) e[i].use=1; } if(num>=n-1) break; } return ans; } int main() { int _,i,j,k,ans1,ans2; scanf("%d",&_); while(_--) { scanf("%d%d",&n,&m); for(i=0;i<m;i++) { scanf("%d %d %d",&e[i].u,&e[i].v,&e[i].w); e[i].u--; e[i].v--; e[i].use=0; e[i].same=0; e[i].del=0; } for(i=0;i<m;i++) for(j=0;j<m;j++) { if(i==j) continue; if(e[i].w==e[j].w) e[i].same=e[j].same=1; } f=1; sort(e,e+m,cmp); ans1=kruskal(); f=0; for(i=0;i<m;i++) { if(e[i].same==1&&e[i].use==1) { e[i].del=1; ans2=kruskal(); if(ans2==ans1) { printf("Not Unique!\n"); break; } e[i].del=0; } } if(i>=m) printf("%d\n",ans1); } return 0; }
相关文章推荐
- SolrJ、Request Handler
- 管理系统UI之四:使用全屏沉浸模式(Using Immersive Full-Screen Mode)
- 响应UI可见性的变化
- iOS8新特性之---- UIAlertController解析
- firefox os 2.1版本号UI接口方面有了质的飞跃
- POJ 1019 Number Sequence
- UITableView以及cell属性
- guestmount
- CodeForces 484B Maximum Value
- IOS学习笔记UIButton
- guestfish 修改 image file
- 设置UIView几个角为圆角
- YUI Compressor使用配置方法 JS/CSS压缩工具
- iOS7中计算UILabel中字符串的高度
- iOS-Core-Animation-Advanced-Techniques(六)
- iOS-Core-Animation-Advanced-Techniques(四)
- iOS-Core-Animation-Advanced-Techniques(一)
- 【xib】加载的一些问题,以UICollectionView 为例
- ContentResolver query 参数详解
- 【EasyUI】——EasyUI的布局