BZOJ 1626: [Usaco2007 Dec]Building Roads 修建道路 kruskal
来源:互联网 发布:信息技术教学的软件 编辑:程序博客网 时间:2024/05/21 02:33
1626: [Usaco2007 Dec]Building Roads 修建道路
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1656 Solved: 681
[Submit][Status][Discuss]
Description
Farmer John最近得到了一些新的农场,他想新修一些道路使得他的所有农场可以经过原有的或是新修的道路互达(也就是说,从任一个农场都可以经过一些首尾相连道路到达剩下的所有农场)。有些农场之间原本就有道路相连。 所有N(1 <= N <= 1,000)个农场(用1..N顺次编号)在地图上都表示为坐标为(X_i, Y_i)的点(0 <= X_i <= 1,000,000;0 <= Y_i <= 1,000,000),两个农场间道路的长度自然就是代表它们的点之间的距离。现在Farmer John也告诉了你农场间原有的M(1 <= M <= 1,000)条路分别连接了哪两个农场,他希望你计算一下,为了使得所有农场连通,他所需建造道路的最小总长是多少。
Input
* 第1行: 2个用空格隔开的整数:N 和 M
* 第2..N+1行: 第i+1行为2个用空格隔开的整数:X_i、Y_i * 第N+2..N+M+2行: 每行用2个以空格隔开的整数i、j描述了一条已有的道路, 这条道路连接了农场i和农场j
Output
* 第1行: 输出使所有农场连通所需建设道路的最小总长,保留2位小数,不必做 任何额外的取整操作。为了避免精度误差,计算农场间距离及答案时 请使用64位实型变量
Sample Input
4 1
1 1
3 1
2 3
4 3
1 4
输入说明:
FJ一共有4个坐标分别为(1,1),(3,1),(2,3),(4,3)的农场。农场1和农场
4之间原本就有道路相连。
1 1
3 1
2 3
4 3
1 4
输入说明:
FJ一共有4个坐标分别为(1,1),(3,1),(2,3),(4,3)的农场。农场1和农场
4之间原本就有道路相连。
Sample Output
4.00
输出说明:
FJ选择在农场1和农场2间建一条长度为2.00的道路,在农场3和农场4间建一
条长度为2.00的道路。这样,所建道路的总长为4.00,并且这是所有方案中道路
总长最小的一种。
输出说明:
FJ选择在农场1和农场2间建一条长度为2.00的道路,在农场3和农场4间建一
条长度为2.00的道路。这样,所建道路的总长为4.00,并且这是所有方案中道路
总长最小的一种。
赤果果的最小生成树,立刻kruskal水过
#include<cmath>#include<ctime>#include<cstdio>#include<cstring>#include<cstdlib>#include<complex>#include<iostream>#include<algorithm>#include<iomanip>#include<vector>#include<string>#include<queue>#include<set>#include<map>using namespace std;typedef double db;inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}const int N=1010;int n,ecnt,fa[N];struct data {db x,y;}p[N];struct EDGE{int fr,to;db val;}e[N<<10];inline void add(int u,int v,db val){e[++ecnt]=(EDGE){u,v,val};}inline db dis(data a,data b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}inline int find(int x){int t=x;while(x!=fa[x])x=fa[x];while(t!=fa[t])t=fa[t],fa[t]=x;return x;}inline bool cmp(EDGE a,EDGE b){return a.val<b.val;}int main(){n=read();int m=read();int u,v;db ans=0;for(int i=1;i<=n;i++){p[i].x=read();p[i].y=read();}for(int i=1;i<=n;i++)fa[i]=i;for(int i=1;i<=m;i++){u=read();v=read();fa[find(u)]=find(v);}for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++){add(i,j,dis(p[i],p[j]));}sort(e+1,e+ecnt+1,cmp);for(int i=1;i<=ecnt;i++)if(find(e[i].fr)!=find(e[i].to))fa[find(e[i].fr)]=find(e[i].to),ans+=e[i].val;printf("%.2lf\n",ans);return 0;}/*4 11 13 12 34 31 44.00*/
阅读全文
0 0
- BZOJ 1626: [Usaco2007 Dec]Building Roads 修建道路 kruskal
- BZOJ 1626: [Usaco2007 Dec]Building Roads 修建道路
- BZOJ 1626: [Usaco2007 Dec]Building Roads 修建道路
- bzoj 1626[Usaco2007 Dec]Building Roads 修建道路
- bzoj1626 [Usaco2007 Dec]Building Roads 修建道路(kruskal裸题)
- bzoj1626[Usaco2007 Dec]Building Roads 修建道路
- [BZOJ1626] [Usaco2007 Dec]Building Roads 修建道路
- bzoj1626【Usaco2007 Dec】Building Roads 修建道路
- [Usaco2007 Dec]Building Roads 修建道路
- [Usaco2007 Dec]Building Roads 修建道路
- 1626: [Usaco2007 Dec]Building Roads 修建道路 (生成树)
- 最小生成树-BZOJ-1626-[Usaco2007 Dec]Building Roads 修建道路
- bzoj 1626: [Usaco2007 Dec]Building Roads 修建道路(最小生成树)
- BZOJ 1626 & luogu 2872 [USACO07DEC]道路建设Building Roads Kruskal
- Cpp环境【BZOJ1626】【Usaco2007 Dec】【Vijos 1693】 修建道路
- [bzoj1626][Usaco2007 Dec][最小生成树]修建道路
- BZOJ 1626 Building Roads
- bzoj 2435 道路修建
- linux学习笔记-----任务栏消失解决方案
- 进程池和进程之间的通信
- visual c#中调用visual c++ 编译的cxform.dll问题总结
- 网站设计-html实现点击链接跳转到当前页面的某个位置
- 关于unity中使用solidwork模型材质及动画丢失问题
- BZOJ 1626: [Usaco2007 Dec]Building Roads 修建道路 kruskal
- 【并发】并发工具类
- 使用VRTK在场景中实现传送 (三)
- 在Linux上面搭建PHP开发环境
- android studio中的instant run造成的一些奇葩bug
- 2017 计蒜之道 初赛 第四场
- tplink arp绑定的 类型 强制和普通的区别
- Java序列化
- Elevator