记录编号 193636 评测结果 AAAAAAAAAA
题目名称 [USACO Dec07] 建造路径 最终得分 100
用户昵称 Gravatarforever 是否通过 通过
代码语言 C++ 运行时间 0.535 s
提交时间 2015-10-15 06:23:37 内存使用 16.56 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<cmath>
  3. #include<iostream>
  4. #include<algorithm>
  5. using namespace std;
  6. struct dd{
  7. int Begin,End;
  8. double juli;
  9. }jie[1000505];
  10. int jk,n,m,fa[1005],ai,bi,sum;
  11. double data,x[1005],y[1005];
  12. bool vis[1005][1005];
  13. int find(int x){
  14. if(fa[x]==x) return x;
  15. fa[x]=find(fa[x]);
  16. return fa[x];
  17. }
  18. double Dis(int xo,int yo){
  19. return sqrt((x[xo]-x[yo])*(x[xo]-x[yo])+(y[xo]-y[yo])*(y[xo]-y[yo]));
  20. }
  21. bool comp(const dd & a,const dd & b){
  22. return a.juli<b.juli;
  23. }
  24. int main(){
  25. freopen("roads.in","r",stdin);
  26. freopen("roads.out","w",stdout);
  27. int yu,lin;
  28. scanf("%d%d",&n,&m);
  29. for(int i=1;i<=n;++i) {
  30. scanf("%lf%lf",&x[i],&y[i]); fa[i]=i;
  31. }
  32. for(int i=1;i<=m;++i) {
  33. scanf("%d%d",&ai,&bi);
  34. jie[++jk].Begin=ai; jie[jk].End=bi; jie[jk].juli=0;
  35. jie[++jk].Begin=bi; jie[jk].End=ai; jie[jk].juli=0;
  36. vis[ai][bi]=1;
  37. }
  38. for(int i=1;i<=n;++i)
  39. for(int j=1;j<i;++j){
  40. if(i!=j&&!vis[i][j]){
  41. double temp=Dis(i,j);
  42. jie[++jk].Begin=i; jie[jk].End=j; jie[jk].juli=temp;
  43. jie[++jk].Begin=j; jie[jk].End=i; jie[jk].juli=temp;
  44. vis[i][j]=1;
  45. }
  46. }
  47. sort(jie+1,jie+jk+1,comp);
  48. for(int i=1;i<=jk;++i){
  49. yu=find(jie[i].Begin); lin=find(lin=jie[i].End);
  50. if(yu!=lin) {
  51. fa[lin]=yu;
  52. data+=jie[i].juli;
  53. sum++;
  54. }
  55. if(sum==n-1) break;
  56. }
  57. printf("%.2lf",data);
  58. getchar();getchar();
  59. }