151. [USACO Dec07] 建造路径
★★ 输入文件:roads.in 输出文件:roads.out 简单对比
时间限制:1 s
内存限制:128 MB
译 by CmYkRgB123
描述
Farmer John 刚刚得到了几个新农场!他想把这几个农场用路连接起来,这样他就可以通过笔直的公路从一个农场到另一个农场了。现在已经有了几条连接着的农场。
N (1 ≤ N ≤ 1,000) 个农场中,每个农场的位置在坐标平面的 (Xi, Yi) (0 ≤ Xi ≤ 1,000,000; 0 ≤
Yi ≤ 1,000,000)。已经有 M (1 ≤ M ≤ 1,000) 条路以前就被建好了。请你帮助 Farmer John
考虑建设尽量少长度的额外的路,使他的农场连在一起。
输入
* 第 1 行: 两个整数: N , M
* 第 2..N+1 行: 两个整数 Xi , Yi
* 第 N+2..N+M+2 行: 两个整数: i , j, 表示已经存在从农场i到农场j的路。
输出
* 第 1 行: 额外的路的最少长度,保留2小数。 请使用 64 位的浮点数。
样例输入
4 1
1 1
3 1
2 3
4 3
1 4
样例输出
4.00
好久没写最小生成树了结果爆了一堆bug。。
对于已经建造的道路,我们可以把它的权值设置成0
然后跑裸地kruskal
注意内存限制!!!!!!!!!!!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define INF 0x7ffff
using namespace std;
const int MAXN=;
int vis[MAXN][MAXN];// 记录两个城市之间是否已经有道路相连
double dis[MAXN][MAXN];
struct node
{
int u,v,nxt;
double w;
}edge[];
int f[MAXN*];
int num=;
struct pos
{
long long int x,y;
}where[MAXN*];
int n,m;
double ans=;
int read(int & n)
{
int flag=,x=;char c='/';
while(c<''||c>''){c=getchar();if(c=='-')flag=;}
while(c>=''&&c<='')x=x*+(c-),c=getchar();
if(flag)n=-x;
else n=x;
}
void deal_dis()
{
//for(int i=1;i<=n;i++)
// for(int j=1;j<i;j++)
// dis[i][j]=INF; for(int i=;i<=n;i++)
for(int j=;j<i;j++)
dis[i][j]=sqrt((where[i].x-where[j].x)*(where[i].x-where[j].x)+(where[i].y-where[j].y)*(where[i].y-where[j].y)); /*for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
printf("%.2lf ",dis[i][j]);
printf("\n");
}*/
//cout<<dis[219][65];
}
void add_edge(int p,int q,double we)
{
edge[num].u=p;
edge[num].v=q;
edge[num].w=we;
// cout<<edge[num].w<<endl;
num++;
}
int find(int x)
{
if(f[x]!=x)
f[x]=find(f[x]);
return f[x];
}
int unionn(int x,int y)
{
int fx=find(x);
int fy=find(y);
f[fx]=fy;
}
int comp(const node & a,const node & b)
{
return a.w<b.w;
}
void kruskal()
{
sort(edge+,edge+num+,comp);
int k=;
for(int i=;i<=num;i++)
{
if(find(edge[i].u)!=find(edge[i].v))
{
unionn(edge[i].u,edge[i].v);
k++;
ans=ans+edge[i].w;
}
if(k==n)
break;
}
printf("%.2lf",ans);
}
int main()
{
freopen("roads.in","r",stdin);
freopen("roads.out","w",stdout);
read(n);read(m);
for(int i=;i<=n;i++)
cin>>where[i].x>>where[i].y,f[i]=i; for(int i=;i<=m;i++)
{
int x,y;
read(x);read(y);
add_edge(x,y,0.00);
vis[x][y]=;
} deal_dis(); for(int i=;i<=n;i++)
for(int j=;j<i;j++)
if(i!=j&&vis[i][j]==)
add_edge(i,j,dis[i][j]); kruskal();
return ;
}
151. [USACO Dec07] 建造路径的更多相关文章
- COGS 144. [USACO Dec07] 魅力手镯【01背包复习】
144. [USACO Dec07] 魅力手镯 ★ 输入文件:charm.in 输出文件:charm.out 简单对比 时间限制:1 s 内存限制:8 MB 译 by CmYkRgB1 ...
- [USACO Jan09] 安全路径
Gremlins最近在农场上泛滥,它们经常会阻止牛们从农庄(牛棚_1)走到别的牛棚(牛_i的目的 地是牛棚_i).每一个gremlin只认识牛_i并且知道牛_i一般走到牛棚_i的最短路经.所以它 们在 ...
- [SinGuLaRiTy] 树链问题
[SinGuLaRiTy-1035] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 关于树链 树链是什么?这个乍一看似乎很陌生的词汇表达的其 ...
- hihocoder 1584 Bounce (数学 && 规律) ACM-ICPC北京赛区2017网络赛
题意: 给定一副n*m的格子图, 问从左上角的点开始往右下角滑,碰到墙壁就反弹, 碰到角落就停止, 问恰好经过一次的格子有多少个. 如图,恰好经过一次的格子有39个. 分析: 首先要引入两个概念, “ ...
- [CSP-S模拟测试]:城市游戏(图论+DP)
题目传送门(内部题109) 输入格式 第一行,两个整数$n,m$. 接下来$m$行,每行三个整数$u,v,l$,描述了一条道路连接的两个路口的编号以及道路的长度. 输出格式 输出一行一个整数,为所求的 ...
- BZOJ1718:[USACO]Redundant Paths 分离的路径(双连通分量)
Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...
- [usaco jan 09] 安全路径 travel [最短路径树]
题面: 传送门 思路: 既然最后一条边不能走,那么就一定是换了一条路,一条不经过这最后一条边的路 如果想要这条路最短,那么其在路上一定尽可能多地走了最短路径 因此,我们对这张图跑一遍从1开始的单源最短 ...
- USACO 回文的路径
传送门 这道题和传纸条在某些方面上非常的相似.不过这道题因为我们要求回文的路径,所以我们可以从中间一条大对角线出发去向两边同时进行DP. 这里就有了些小小的问题.在传纸条中,两个路径一定是同时处在同一 ...
- bzoj 1600 & Usaco 月赛 2008 建造栅栏 题解
[原题] 1600: [Usaco2008 Oct]建造栅栏 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 785 Solved: 443 [Subm ...
随机推荐
- 【nginx】nginx与apache的优缺点比较
参考: http://zyan.cc/nginx_php_v6/ nginx相对于apache的优点: 1.轻量级,同样的web 服务,比apache服务器占用更少的内存及资源 2.抗并发,nginx ...
- log4j-over-slf4j.jar AND slf4j-log4j12.jar 依赖冲突解决方案
使用maven构建项目时,如果项目中有log4j的依赖,在运行程序时可能会出现在同一个类中log4j-over-slf4j.jar和 slf4j-log4j12.jar冲突的问题: 项目报错内容为: ...
- SaltStack学习系列之state常用模块
常用模块:cron,cmd,file,mount,ntp,pkg,service,user,group cmd模块 参数: name:要执行的命令 unless:用于检查的命令,只有unless指向的 ...
- C#高级编程五十二天----有序列表
有序列表 假设须要基于对全部集合排序,就能够使用SortedList<TKey,TValue>类.这个类依照键给元素排序.这个集合中的值和键都能够使用随意类型. 以下的样例创建了一个有序列 ...
- 我在CSDN开通博客啦!
今天,我最终在CSDN开通博客啦!
- cnn,rnn,dnn
CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别? https://www.zhihu.com/question/34681168 CNN(卷积神经网络) ...
- DBCP,C3P0,Tomcat_JDBC 性能及稳定性測试
原创文章,转载请指明出处:http://aub.iteye.com/blog/1404219, 尊重他人即尊重自己 DBCP,C3P0,Tomcat_JDBC 性能及稳定性測试 1.測试环境: 硬件环 ...
- Razor基础,视图里如何调用controller里的函数
1.单行代码书写 @代码 2.多行代码书写 @{ //@加个大括号就可以在里面写C#代码了. C#代码第一行 C#代码第二行 } 3.Razor模板引擎会自动判别代码块,但是当代码存在二义性的时候,可 ...
- [计算机-好软推荐]证件照制作的利器,不会PS也没有关系
多年前发现了这一款软件,后来不管电脑是从xp升级到win7,还是从win7升级到win8,我都收藏了它. 我用它主要是制作大头照,然后通过咔嚓鱼冲印,比起一般的冲印店要便宜些. 这个软件是台湾的朋友开 ...
- JButton的setRollover出现的奇怪问题
设置了setRollover,可以正常出现状态但是却不会回到默认状态. 研究了一下才发现,repaint的时候不会清除背板而是覆盖上去的, 所以如果原图是透明图就会出现状态不变的情况