随笔分类 - 最小生成树
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
阅读全文
杭电 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
阅读全文
杭电 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;
阅读全文
杭电 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
阅读全文
杭电 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
阅读全文
杭电 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
阅读全文
杭电 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
阅读全文
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; } }
阅读全文
畅通工程
摘要:畅通工程 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省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成
阅读全文
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;
阅读全文
并查集(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",&
阅读全文
浙公网安备 33010602011771号