C/C++教程

P2872 [USACO07DEC]Building Roads S

本文主要是介绍P2872 [USACO07DEC]Building Roads S,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目链接 https://www.luogu.com.cn/problem/P2872

谢谢,我真的会哭。。。。。我以为敲一遍的模板题而已。。。。(它就是!)又WA了好多遍还找不到错误。。。


 

第一个错误点:第20行没有用double把z传进来

第二个:29行两条边也要用double算


 

放AC代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=5000100;
 4 int n,m;//点、边d
 5 int cnt;//计数
 6 int sum;//记录边数
 7 double ans;//输出和
 8 int fa[N];//保存父节点
 9 struct Point
10 {//点的信息
11     int x,y;
12 }point[N];
13 
14 struct Edge
15 {//边的信息
16     int u,v;
17     double w;
18 }edge[N];
19 
20 void add(int u,int v,double z)
21 {//添加边
22     edge[++cnt].u=u;
23     edge[cnt].v=v;
24     edge[cnt].w=z;
25 }
26 
27 double distance(int x,int y)
28 {//计算距离
29     return (double)(sqrt((double)(point[x].x-point[y].x)*(point[x].x-point[y].x)+(double)(point[x].y-point[y].y)*(point[x].y-point[y].y)));
30 }
31 
32 bool cmp(Edge a,Edge b)
33 {//排序
34     if(a.w==b.w) return a.u<b.u;
35     return a.w<b.w;
36 }
37 
38 int find(int o)
39 {//找根节点
40     return fa[o]==o?o:fa[o]=find(fa[o]);
41 }
42 
43 int main()
44 {
45     cin>>n>>m;
46     for(int i=1;i<=n;i++)
47     {//输入点的信息
48         cin>>point[i].x>>point[i].y;
49     }
50     for(int i=1;i<=n;i++)
51     {//初始化根节点
52         fa[i]=i;
53     }
54     for(int i=1;i<=n;i++)
55     {//枚举计算上三角形相邻点的距离
56         for(int j=i+1;j<=n;j++)
57         {
58             double z=distance(i,j);
59             add(i,j,z);
60         }
61     }
62     for(int i=1;i<=m;i++)
63     {//输入已知边的信息并将其权值初始化为0
64         int u,v;
65         cin>>u>>v;
66         add(u,v,0.0);
67     }
68     //按照边的权值排序
69     sort(edge+1,edge+cnt+1,cmp);
70     for(int i=1;i<=cnt;i++)
71     {
72         int x_root=find(edge[i].u);
73         int y_root=find(edge[i].v);
74         if(x_root!=y_root)
75         {
76             fa[x_root]=y_root;
77             sum++;
78             ans+=edge[i].w;
79         }
80         if(sum==n-1)
81             break;
82     }
83     printf("%.2lf",ans);
84     return 0;
85 }

 

这篇关于P2872 [USACO07DEC]Building Roads S的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!