记录编号 |
193636 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[USACO Dec07] 建造路径 |
最终得分 |
100 |
用户昵称 |
forever |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.535 s |
提交时间 |
2015-10-15 06:23:37 |
内存使用 |
16.56 MiB |
显示代码纯文本
- #include<cstdio>
- #include<cmath>
- #include<iostream>
- #include<algorithm>
- using namespace std;
- struct dd{
- int Begin,End;
- double juli;
- }jie[1000505];
- int jk,n,m,fa[1005],ai,bi,sum;
- double data,x[1005],y[1005];
- bool vis[1005][1005];
- int find(int x){
- if(fa[x]==x) return x;
- fa[x]=find(fa[x]);
- return fa[x];
- }
- double Dis(int xo,int yo){
- return sqrt((x[xo]-x[yo])*(x[xo]-x[yo])+(y[xo]-y[yo])*(y[xo]-y[yo]));
- }
- bool comp(const dd & a,const dd & b){
- return a.juli<b.juli;
- }
- int main(){
- freopen("roads.in","r",stdin);
- freopen("roads.out","w",stdout);
- int yu,lin;
- scanf("%d%d",&n,&m);
- for(int i=1;i<=n;++i) {
- scanf("%lf%lf",&x[i],&y[i]); fa[i]=i;
- }
- for(int i=1;i<=m;++i) {
- scanf("%d%d",&ai,&bi);
- jie[++jk].Begin=ai; jie[jk].End=bi; jie[jk].juli=0;
- jie[++jk].Begin=bi; jie[jk].End=ai; jie[jk].juli=0;
- vis[ai][bi]=1;
- }
- for(int i=1;i<=n;++i)
- for(int j=1;j<i;++j){
- if(i!=j&&!vis[i][j]){
- double temp=Dis(i,j);
- jie[++jk].Begin=i; jie[jk].End=j; jie[jk].juli=temp;
- jie[++jk].Begin=j; jie[jk].End=i; jie[jk].juli=temp;
- vis[i][j]=1;
- }
- }
- sort(jie+1,jie+jk+1,comp);
- for(int i=1;i<=jk;++i){
- yu=find(jie[i].Begin); lin=find(lin=jie[i].End);
- if(yu!=lin) {
- fa[lin]=yu;
- data+=jie[i].juli;
- sum++;
- }
- if(sum==n-1) break;
- }
- printf("%.2lf",data);
- getchar();getchar();
- }