摘要: 这来到题目差不多,因为几乎是每条边都用到,所以用prim算法应该会比较好,从运行的效率来看也十分明显hdu1875 则对边做了一定的限制,只需要的加边的时候判断一下就好了hdu 1162 #include<iostream>#include<stdio.h>#include<stdlib.h>#include<string>#include<math.h>#define MAXN 101 #define MAXINT 99999999using namespace std;int n,s[MAXN];double dis[MAXN], 阅读全文
posted @ 2011-08-16 18:25 枕边梦 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 还是一道差不多一样的最小生成树的题目,数据量本来也不大,Kruskal 算法直接过#include<iostream>#include<string>#include<algorithm>using namespace std;struct edge{ int u,v,w; edge(int x=0,int y=0,int z=0):u(x),v(y),w(z){};};edge e[80];int n,m,ans;int f[30];int find(int x){ if(x==f[x]) return x; f[x]=find(f[x]); return 阅读全文
posted @ 2011-08-16 17:28 枕边梦 阅读(204) 评论(0) 推荐(0) 编辑
摘要: hdu1102#include<iostream>#include<string>#define MAXINT 9999999using namespace std;int map[101][101],s[101],dis[101],n;int prim(){ int sum=0; memset(s,0,sizeof(s)); s[1]=1; for(int i=2;i<=n;i++) dis[i]=map[1][i]; dis[1]=0; for(int i=1;i<n;i++) { int min=MAXINT,k=1; for(int j=1;j< 阅读全文
posted @ 2011-08-16 01:21 枕边梦 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 用Kruskal算法求最小生成树,要用到并查集,最后再顺便用并查集判断是否连通,只需判断父节点数是否唯一#include<iostream>#include<string>#define MAXN 101using namespace std;int n,m,f[MAXN],ans;struct edge{ int u,v,w; edge(int x=0,int y=0,int z=0):u(x),v(y),w(z){};}e[MAXN*50];int cmp(const void *a, const void *b) { if(((struct edge *)a)-& 阅读全文
posted @ 2011-08-16 00:36 枕边梦 阅读(191) 评论(0) 推荐(0) 编辑