POJ 1751 Highways (kruskal)
来源:互联网 发布:mac sleep命令 编辑:程序博客网 时间:2024/05/14 11:44
题目链接:http://poj.org/problem?id=1751
题目大意:给出n个村庄的坐标 和已经了m条路 现在要求建最短的路 将所有村庄连起来 将这些路输出
思路;这题可以用kruskal来做 通过n个点 枚举出所有的边长建立图 然后kruskal的模板题
#include <iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<string.h>using namespace std;#define maxn 1010struct node{int x,y;}s[maxn];//村庄坐标int u[maxn*maxn/2],v[maxn*maxn/2],w[maxn*maxn/2];int r[maxn*maxn/2],pre[maxn*maxn/2];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;}int dis(int x1,int y1,int x2,int y2){return (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);}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;}}void init(){int m;scanf("%d",&m);while(m--){int a,b;scanf("%d%d",&a,&b);join(a,b);}}bool check(int n){int ans=find(1);for(int i=2;i<=n;i++)if(find(i)!=ans)return false;return true;}void kruskal(int n,int t){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();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;printf("%d %d\n",u[e],v[e]);}if(check(n))//检验是否已经都在一个集合之中break;}}int main(){int a,b;int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d%d",&s[i].x,&s[i].y);}int t=0;for(int i=1;i<=n;i++)//任意两个城市之间的距离{for(int j=i+1;j<=n;j++){u[t]=i,v[t]=j,w[t]=dis(s[i].x,s[i].y,s[j].x,s[j].y);t++;}}kruskal(n,t);return 0;}
阅读全文
0 0
- poj 1751 Highways(Kruskal)
- POJ 1751 Highways (kruskal)
- POJ - 1751----Highways(Kruskal)
- POJ 1751 Highways(Kruskal Algorithm)
- POJ 1751Highways Kruskal求解
- poj 2485 Highways(Kruskal!)
- poj 2485 Highways(Kruskal)
- POJ-2485-Highways(kruskal)
- POJ:1751 Highways(最小生成树kruskal算法)
- Poj --1751 highways (最小生成树,kruskal算法)
- POJ 1751 Highways (Kruskal 最小生成树)
- poj 1751 Highways (prim和kruskal)
- POJ 2485 Highways Kruskal
- poj 2485 Highways 【kruskal】
- POJ 2485 Highways (kruskal+prim)
- poj 1751 Highways 最小生成树之Kruskal(克鲁斯卡尔)算法
- POJ 1751 Highways 最小生成树 Kruskal && Prim
- POJ 2485 Highways 最小生成树 (Kruskal)
- 【bzoj4429】[Nwerc2015] Elementary Math小学数学
- Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals) A 题目忘了
- CART树回归
- STM32平台移植uCOSIII
- Selenium IDE 使用方法小结
- POJ 1751 Highways (kruskal)
- Selenium-如何截取图像
- threejs学习随记(一)
- 开发中sql server一些问题的解决办法
- c语言核心整理之深入数组,熟练常用的基于数组的排序和搜索算法
- 那些年使用缓存踩过的坑
- php免费接口API 分享 各大功能
- hibernate HQL查询的参数绑定
- Mac下使用docker搭建STF(踩坑失败)