码迷,mamicode.com
首页 > 其他好文 > 详细

HDU1875

时间:2020-05-01 12:49:48      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:struct   merge   lse   bsp   研究生   std   ios   lag   print   

研究生复试题这么水的吗。。

根据合法距离得到所有合法边,跑一遍Kruscal以后判断所有点是不是有相同的祖先即可。

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<math.h>
 4 #include<string.h>
 5 using namespace std;
 6 int n,m,q,f[101],flag;
 7 double ans=0;
 8 struct node{
 9     double x,y;
10 }a[101];
11 
12 struct edge{
13     int from,to;
14     double w;
15     bool operator < (const edge &a){
16         return w<a.w;
17     }
18 }e[10010];
19 
20 double dis(node a,node b){
21     return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
22 }
23 
24 void ini(){
25     for (int i=1;i<=n;i++) f[i]=i;
26     memset(a,0,sizeof a);
27     memset(e,0,sizeof e);
28     m=0; //合法边数 
29     ans=0;
30     flag=1;
31 }
32 int getf(int u){
33     return u==f[u]?f[u]:f[u]=getf(f[u]);
34 }
35 
36 void merge(int u,int v){
37     f[getf(u)]=getf(v);
38 }
39 
40 void solve(){
41     cin>>q;
42     while (q--){
43         cin>>n;
44         ini();
45         for (int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
46         //添加合法边 
47         for (int i=1;i<n;i++){
48             for (int j=i+1;j<=n;j++){
49                 if (dis(a[i],a[j])>=10 && dis(a[i],a[j])<=1000) e[++m]={i,j,dis(a[i],a[j])};
50             }
51         }
52         //Kruscal
53         sort(e+1,e+1+m);
54         for (int i=1;i<=m;i++){
55             if (getf(e[i].from)!=getf(e[i].to)){
56                 ans+=e[i].w*100;
57                 merge(e[i].from,e[i].to);
58             }
59         }
60         //判断答案合法性 
61         for (int i=1;i<=n && flag;i++){
62             if (getf(i)!=getf(1)) flag=0;
63         }
64         if (flag) printf("%.1f\n",ans);
65         else cout<<"oh!"<<endl;
66     }
67 }
68 
69 int main()
70 {
71     solve();
72     return 0;
73 }

 

HDU1875

标签:struct   merge   lse   bsp   研究生   std   ios   lag   print   

原文地址:https://www.cnblogs.com/whiteli/p/12813002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!