bzoj1626【Usaco2007 Dec】Building Roads 修建道路
来源:互联网 发布:软件功能和技术特点 编辑:程序博客网 时间:2024/06/11 23:26
1626: [Usaco2007 Dec]Building Roads 修建道路
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1311 Solved: 512
[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,并且这是所有方案中道路
总长最小的一种。
HINT
Source
Silver
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define F(i,j,n) for(int i=j;i<=n;i++)#define D(i,j,n) for(int i=j;i>=n;i--)#define LL long long#define pa pair<int,int>#define MAXN 1005using namespace std;int n,m,u,v,cnt=0,p[MAXN];LL x[MAXN],y[MAXN];double ans=0;struct data{int x,y; double w;}a[MAXN*MAXN];LL read(){LL ret=0,flag=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') flag=-1;ch=getchar();}while (ch>='0'&&ch<='9'){ret=ret*10+ch-'0';ch=getchar();}return ret*flag;}int find(int tmp){if (p[tmp]==tmp) return tmp;p[tmp]=find(p[tmp]);return p[tmp];}void merge(int a,int b){int fa=find(a),fb=find(b);if (fa!=fb) p[fa]=fb;}bool cmp(data d1,data d2){return d1.w<d2.w;}int main(){//freopen("input.in","r",stdin);scanf("%d%d",&n,&m);F(i,1,n){x[i]=read();y[i]=read();}F(i,1,n) p[i]=i;F(i,1,m){scanf("%d%d",&u,&v);merge(u,v);}F(i,1,n) F(j,1,n){if (i==j) continue;a[++cnt]=(data){i,j,sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]))};}sort (a+1,a+cnt+1,cmp);F(i,1,cnt){if (find(a[i].x)==find(a[i].y)) continue;merge(a[i].x,a[i].y);ans+=a[i].w;}printf("%.2lf\n",ans);}
0 0
- bzoj1626[Usaco2007 Dec]Building Roads 修建道路
- [BZOJ1626] [Usaco2007 Dec]Building Roads 修建道路
- bzoj1626【Usaco2007 Dec】Building Roads 修建道路
- bzoj1626 [Usaco2007 Dec]Building Roads 修建道路(kruskal裸题)
- [Usaco2007 Dec]Building Roads 修建道路
- [Usaco2007 Dec]Building Roads 修建道路
- BZOJ 1626: [Usaco2007 Dec]Building Roads 修建道路
- 1626: [Usaco2007 Dec]Building Roads 修建道路 (生成树)
- BZOJ 1626: [Usaco2007 Dec]Building Roads 修建道路
- bzoj 1626[Usaco2007 Dec]Building Roads 修建道路
- BZOJ 1626: [Usaco2007 Dec]Building Roads 修建道路 kruskal
- Cpp环境【BZOJ1626】【Usaco2007 Dec】【Vijos 1693】 修建道路
- [bzoj1626][Usaco2007 Dec][最小生成树]修建道路
- 最小生成树-BZOJ-1626-[Usaco2007 Dec]Building Roads 修建道路
- bzoj 1626: [Usaco2007 Dec]Building Roads 修建道路(最小生成树)
- USACO 建造道路 Building Roads
- USACO 2007 Dec Silver 2.Building Roads
- 道路修建
- UVA 11748 Rigging Elections
- 蓝懿ios 技术内容和心得交流分享 11.8
- Python编写微信打飞机小游戏(二)
- c 中分号的应用详解 以及 什么时候该用{} 以及shell脚本中的分号
- HDU 1160 FatMouse's Speed(最长递减子序列变形)
- bzoj1626【Usaco2007 Dec】Building Roads 修建道路
- JSP,js,servlet之间传值时中文乱码的处理
- 用Go实现的简易TCP通信框架
- 用Eclipse进行C++开发时Bianry not found的问题解决
- 黑马程序员——面对对象———继承、多态、内部类等
- bzoj1627【Usaco2007 Dec】穿越泥池
- Android Studio中AVD SDk找不到的解决办法
- 大水题--CodeForces - 591A Wizards' Duel
- maven、hibernate连接mysql实例框架