POJ 1751 Highways(Kruskal Algorithm)
来源:互联网 发布:淘宝店家骂人怎么办 编辑:程序博客网 时间:2024/05/29 03:58
题目链接:
POJ 1751 Highways
题意:
有n个点需要修公路将这n个点连通,修公路里程越长,成本越高。已知有m条公路已经修好了的。
求出最少成本下,需要修哪些公路,将这些公路的起始点输出来。
分析:
最小生成树。将m条已经修好的公路用并查集合并下,再用Kruskal算法记录下修的公路起始点即可。
注意:
测试样例无需循环读入,直接scanf(“%d”,&n);即可,用while反而WA.
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;const int maxn=800;int n,m,tot,u,v,fu,fv;int pre[maxn];struct Point{ int x,y;}point[maxn];struct Edge{ int u,v; double w;}edge[maxn*maxn];struct Ans{ int u,v;}ans[maxn];bool cmp(struct Edge a,struct Edge b){ return a.w<b.w;}double Distance(struct Point a,struct Point b){ int xx=a.x-b.x; int yy=a.y-b.y; return sqrt(xx*xx+yy*yy);}int find(int x){ return pre[x]==x?x:pre[x]=find(pre[x]);}int main(){#ifdef LOCAL freopen("in.txt","r",stdin);#endif scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&point[i].x,&point[i].y); tot=0; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { edge[tot].u=i; edge[tot].v=j; edge[tot].w=Distance(point[i],point[j]); tot++; } } sort(edge,edge+tot,cmp); for(int i=0;i<maxn;i++) pre[i]=i; scanf("%d",&m); for(int i=1;i<=m;i++) { scanf("%d%d",&u,&v); fu=find(u); fv=find(v); if(fu!=fv) pre[fu]=fv; } int tmp=0; for(int i=0;i<tot;i++) { u=edge[i].u; v=edge[i].v; fu=find(u); fv=find(v); if(fu!=fv) { pre[fu]=fv; ans[tmp].u=u; ans[tmp].v=v; tmp++; } } for(int i=0;i<tmp;i++) printf("%d %d\n",ans[i].u,ans[i].v); return 0;}
0 0
- POJ 1751 Highways(Kruskal Algorithm)
- poj 1751 Highways(Kruskal)
- POJ 1751 Highways (kruskal)
- POJ - 1751----Highways(Kruskal)
- 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)
- MFC(Microsoft Foundation Classes)
- linux命令 SCP
- BaseAdapter 使用和优化详析
- mysql 各个flush 操作
- leetcod--Missing Number
- POJ 1751 Highways(Kruskal Algorithm)
- MAC 配置 多端口(虚拟主机) apache 总结
- ubuntu14.04安装docker
- http与https的区别
- mysql 创建 报表 slave
- 网络进程通信——Socket
- 软件测试lab1: 利用Junit, Hamcrest及Eclemma进行软件测试
- AlertDialog中使用自定义View中的点击监听如何实现
- 2016.3.18华为上机题目:去除重复字符并排序