poj2421(kruskal)(水题)
来源:互联网 发布:数据采集网络兼职 编辑:程序博客网 时间:2024/04/19 07:06
题目链接:http://poj.org/problem?id=2421
题目大意;有n个村庄 接下来是一个n*n的矩阵 代表i行第j个 代表村庄i到j的距离
现已经有m条路 问还需要最少多长的距离将所有村庄连通
思路:模板题 直接上代码
kruskal:
#include <iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<string.h>using namespace std;#define maxn 200int u[maxn*maxn],v[maxn*maxn],w[maxn*maxn];int r[maxn*maxn],pre[maxn*maxn];int n,m,t;int find(int x){int r=x;while(pre[r]!=r){r=pre[r];}int i=x,j;while(i!=r){j=pre[i];pre[i]=r;i=j;}return r;}bool cmp(int x,int y){return w[x]<w[y];}void join(int x,int y){int fx=find(x),fy=find(y);if(fx!=fy){pre[fx]=fy;}}bool check(){int ans=find(1);for(int i=2;i<=n;i++)if(find(i)!=ans)return false;return true;}void init(){int a,b;scanf("%d",&m);for(int i=0;i<m;i++){scanf("%d%d",&a,&b);join(a,b);}}void kruskal(){for(int i=1;i<=n;i++){pre[i]=i;}for(int i=0;i<t;i++)r[i]=i;sort(r,r+t,cmp);init();int sum=0;for(int i=0;i<t;i++){int e=r[i],x=find(u[e]),y=find(v[e]);if(x!=y)//如果不在一个集合之中 在将其将入并入一个集合 同时输出这条边{pre[x]=y;sum+=w[e];}if(check())//检验是否已经都在一个集合之中break;}printf("%d\n",sum);}int main(){scanf("%d",&n);t=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&w[t]);u[t]=i,v[t++]=j;}}kruskal();return 0;}
阅读全文
0 0
- poj2421(kruskal)(水题)
- 最小生成树(Kruskal算法)--poj2421
- poj2421 kruskal
- poj2421(kruskal)
- poj2421【MST-prim+Kruskal】
- poj2421 Constructing Roads (prime)
- poj2421 MST(prim+临接表)
- [POJ2421]最小生成树+PRIM+KRUSKAL
- poj2421
- poj2421
- poj2421
- poj2421
- poj2421
- poj2421
- poj2421
- 还是畅通工程(水题) kruskal算法
- Kruskal算法 (转载)
- POJ_2349(kruskal)
- 简洁的JS代码--几点建议-积累ing
- 最大黑区域-DFS
- MQTT 协议解析,java使用
- Python语法31[module/package+import]
- myeclipse安装js代码提示插件Spket
- poj2421(kruskal)(水题)
- 几点建议帮你写出简洁的JS代码
- WooCommerce——产品过滤器WooCommerce Products Filter
- Ubuntu下如何一劳永逸的安装opencv
- Nodejs应用GrayLog日志系统初探
- Solr 简介与安装配置
- 我的RxJava入门(三)
- js整理成树结构
- Webpack + react-router 按需加载