随笔分类 -  最小生成树

prim() 模板
摘要:int prim(){ int sum=0; dis[1]=0; for(int i=1;i<=n;i++) { int pos,t=inf; for(int j=1;j<=n;j++) { if(hash[j]==0) { if(dis[j]<t) { t=dis[j]; pos=j; } } } hash[pos]=1; if(pos==n) break; for(int j=1;j<=n;j++) { if(hash[j]==0) { if(map[pos][j]!=inf&&map[pos][j]<dis[j]) dis[j]=map[po 阅读全文
posted @ 2011-07-20 09:20 枫叶飘泪 阅读(209) 评论(0) 推荐(0)
杭电 1213 How Many Tables
摘要:#include<stdio.h>#include<string.h>#include<stdlib.h>int n,m;int set[1010];struct val{ int x,y;}e[1010];int find(int x){ return x==set[x] ? x : find(set[x]);}int main(){ int t,x,y; while(scanf("%d",&t)!=EOF) { while(t--) { scanf("%d%d",&n,&m); for(in 阅读全文
posted @ 2011-07-19 13:54 枫叶飘泪 阅读(224) 评论(0) 推荐(0)
杭电 1232 畅通工程
摘要:#include<stdio.h>#include<string.h>#include<stdlib.h>int set[1010];int n,m;struct val{ int x,y;}e[1000000];int find(int a){ return a==set[a] ? a : find(set[a]);}int main(){ int x,y; while(scanf("%d%d",&n,&m),n) { for(int i=1;i<=n;i++) { set[i]=i; } for(int i=1; 阅读全文
posted @ 2011-07-19 13:38 枫叶飘泪 阅读(265) 评论(0) 推荐(0)
杭电 1879 继续畅通工程
摘要:#include<stdio.h>#include<string.h>#include<stdlib.h>int set[110],n,m;struct val{ int x,y,v,s;}e[10000];int cmp(const void *a,const void *b){ return ((val *)a)->v-((val *)b)->v;}int find(int x){ return x==set[x] ? x : find(set[x]);}int kruskal(){ int sum=0; int x,y,v,s; for(i 阅读全文
posted @ 2011-07-19 13:07 枫叶飘泪 阅读(225) 评论(0) 推荐(0)
杭电 1683 畅通工程
摘要:#include<stdio.h>#include<string.h>#include<stdlib.h>int set[110],n,m;struct val{ int a,b,v; }e[10000];int find(int x){ return x==set[x] ? x : find(set[x]); }int kruskal(){ int sum=0; for(int i=1;i<=n;i++) { int a=e[i].a,b=e[i].b,v=e[i].v; int x=find(a),y=find(b); if(x!=y) { set 阅读全文
posted @ 2011-07-19 11:37 枫叶飘泪 阅读(231) 评论(0) 推荐(0)
杭电 1875 畅通工程再续
摘要:此题依旧是套kruskal()的模板,只是条件有所隐含,此处要自己找出结构体val中的三个参量,并且注意到当距离d可以对应于v;#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>struct zb{ int x,y;}z[110];struct val{ int a,b; double v;}e[10000];int set[110];int c;int m;double sum;int cmp(const void *a,const void *b){ re 阅读全文
posted @ 2011-07-18 16:59 枫叶飘泪 阅读(191) 评论(0) 推荐(0)
杭电 1233 还是畅通工程
摘要:#include<stdio.h>#include<stdlib.h>#include<string.h>int inf=0x7fffffff;int set[110];struct val{ int x,y,v;}e[10000];int n,m;int cmp(const void *a,const void *b){ return ((val *)a)->v - ((val *)b)->v;//注意加括号。 }int find(int a){ return set[a]==a?a:find(set[a]);}int kruskal(){ i 阅读全文
posted @ 2011-07-16 21:10 枫叶飘泪 阅读(254) 评论(0) 推荐(0)
prim()模板
摘要:#include<stdio.h>#include<string.h>#include<stdlib.h>const int inf=0x7fffffff;int n,m;int map[110][110],hash[110],dis[110];int prim() { int sum=0; dis[1]=0; for(int i=1;i<=n;i++) { int pos,t=inf; for(int j=1;j<=n;j++) { if(hash[j]==0) { if(dis[j]<t) { t=dis[j]; pos=j; } } 阅读全文
posted @ 2011-05-25 17:07 枫叶飘泪 阅读(505) 评论(0) 推荐(0)
畅通工程
摘要:畅通工程 Time Limit : 1000/1000ms (Java/Other)Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 12Accepted Submission(s) : 6Font: Times New Roman | Verdana | Georgia Font Size: ← →Problem Description省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成 阅读全文
posted @ 2011-05-21 11:20 枫叶飘泪 阅读(312) 评论(0) 推荐(0)
kruskal()模板
摘要:#include<stdio.h>#include<string.h>#include<stdlib.h>int n,m,set[124];struct val{ int x,y,v;}e[10010];int find(int x){ return set[x]==x?x:find(set[x]);}int kruskal(){ int sum=0; for(int i=1;i<=m;i++) { int x=e[i].x,y=e[i].y,v=e[i].v; int a=find(x),b=find(y); if(a!=b) { set[b]=a; 阅读全文
posted @ 2011-05-21 10:54 枫叶飘泪 阅读(381) 评论(0) 推荐(0)
并查集(kruskal的核心思想)模板
摘要:#include<stdio.h>#include<string.h>#include<stdlib.h>int n,m,set[1000];int find(int x)//查找根节点{ return set[x]==x?x:set[x]=find(set[x]);//递归}void Union(int x,int y)//合并不相等根节点的两个集合{ int a=find(x),b=find(y); if(a!=b) set[a]=b;}int main(){ int a,b,x,y,sum; while(scanf("%d%d",& 阅读全文
posted @ 2011-05-20 21:09 枫叶飘泪 阅读(279) 评论(0) 推荐(0)