hdu1879——继续畅通工程——————【kruskal模板】
来源:互联网 发布:程序员 英文面试 编辑:程序博客网 时间:2024/06/05 20:56
以前写过这道题不止一遍,但是再碰到这个题目的时候还是迷茫,长时间不练习这方面的题目就不会了,看来真的需要坚持码代码,不写会生疏的!
#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>using namespace std;//最小生成树,拓扑排序,最短路径,二分图,网络流。const int N=110;int father[N*N];struct node { int st_p; //左端 int en_p; //右端 int cost; //边长}edge[N*N];void init(){ for(int i=0;i<N;i++){ father[i]=i; }}int find(int x){ if(father[x]==x){ return x; } else{ return father[x]=find(father[x]); }}void Union(int x,int y){ x=find(x),y=find(y); if(x!=y){ if(x<y){ father[y]=x; } else father[x]=y; }}bool cmp(node a,node b){ return a.cost<b.cost;}int kruskal(int k){ int x,y,ans=0; sort(edge,edge+k,cmp); for(int i=0;i<k;i++){ x=edge[i].st_p; y=edge[i].en_p; x=find(x),y=find(y); if(x!=y){ if(x>y){ father[x]=y; } else{ father[y]=x; } ans+=edge[i].cost; } } return ans;}int main(){ int n,m,a,c,b,d; while(scanf("%d",&n)!=EOF&&n){ init(); m=n*(n-1)/2; int k=0; for(int i=0;i<m;i++){ scanf("%d%d%d%d",&a,&b,&c,&d); if(d==1){ Union(a,b); continue; } edge[k].st_p=a; edge[k].en_p=b; edge[k++].cost=c; } int ans=kruskal(k); printf("%d\n",ans); } return 0;}
0 0
- hdu1879——继续畅通工程——————【kruskal模板】
- ACM-最小生成树之继续畅通工程——hdu1879
- HDU1879:继续畅通工程【kruskal】
- hdu1879继续畅通工程(并查集+Kruskal,Kruskal模板题)
- HDU1875畅通工程之最小生成树——kruskal
- 畅通工程——kruskal+并查集
- hdu1879继续畅通工程
- HDU1879继续畅通工程
- HDU1879--继续畅通工程
- hdu1879 继续畅通工程
- HDU1879继续畅通工程
- hdu1879继续畅通工程
- HDU1879继续畅通工程
- hdu1879继续畅通工程
- HDU1879---继续畅通工程
- HDU1879 继续畅通工程
- hdu1879-继续畅通工程
- hdu1879 继续畅通工程
- 第一题的map版本
- 第2章 2.4 JSP声明
- onserviceConnected()和startService()
- VC++ 中遇到的一些warnings及其解决方法
- 使用HttpClient登陆网站 抓取页面数据
- hdu1879——继续畅通工程——————【kruskal模板】
- ZooKeeper介绍及典型使用场景
- java、C语言中default
- swift or oc?
- dinner
- 转场动画中的私有type,非常炫酷
- 中遇到的一些warnings及其解决方法
- Android关于EditText,插入字符串到光标所在位置
- 一个简单的hibernate连接oracle数据库例子