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

HHHOJ 2018.10.4 ACM 造桥

时间:2018-10-05 16:15:34      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:两种   image   click   ble   函数   flag   isp   i++   思路   

技术分享图片

样例

技术分享图片
5
1 3
2 -3
6 -2
3 2
5 1
5
0 1
2 1
4 0
2 3
5 4
10
输入
技术分享图片
3 5
输出

思路

坑啊,当时没打出来,精度问题,double返回int再返回到double函数里位数不一样(用一个变量存一下),其实很简单,先FLOYD一下,再找dis>p的点,把序号扔进数组里。

如x1,y1建桥到x2,y2就有两种方法:1.先到1再到2再到0   2.先到2再到1再到0。

若两种方法都不可行,则不可行,不然tot++,然后保存两点编号。

代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 double path[105][105];
 4 bool f=0;
 5 int n,m,tot=0,p,ansa,ansb;
 6 double x[105],y[105];
 7 int q[105],top=0;
 8 double anss=2e9;
 9 double getlen(int a,int b){return (double)sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));}
10 int main() 
11 {
12     freopen("bridge.in","r",stdin);
13     freopen("bridge.out","w",stdout);
14     cin>>n;    
15     x[0]=0;y[0]=0;
16     for (int i=1;i<=n;i++) cin>>x[i]>>y[i];
17     cin>>m;    
18     for (int i=0;i<=n;i++)for (int j=0;j<=n;j++)path[i][j]=2e9;
19     for (int i=1;i<=m;i++)
20     {
21         int a,b;
22         cin>>a>>b;
23         path[a][b]=path[b][a]=getlen(a,b);
24     }
25     cin>>p;
26     for (int k=0;k<=n;k++)
27      for (int i=0;i<=n;i++)
28       for (int j=0;j<=n;j++)
29         path[i][j]=min(path[i][j],path[i][k]+path[k][j]);
30     for (int i=0;i<=n;i++) path[i][i]=0;
31     for(int i=1;i<=n;i++)if(path[i][0]>p)q[++top]=i;
32     for (int i=0;i<=n;i++) 
33      for (int j=i+1;j<=n;j++)
34      {
35       bool flag=0;
36       double ans=getlen(i,j);
37       if(path[i][j]==ans||ans>anss)continue;
38       for (int k=1;k<=top;k++) if (path[q[k]][i]+ans+path[j][0]>p&&path[q[k]][j]+ans+path[i][0]>p) {flag=1;break;}
39       if (flag==0) if (anss==ans) tot++;else anss=ans,tot=1,ansa=i,ansb=j; 
40     }
41     if(tot==0) {cout<<0<<endl;return 0;}
42     if (tot==1) cout<<ansa<<" "<<ansb<<endl;else cout<<tot<<endl;
43     return 0;
44 }
45 /*
46 5
47 1 3
48 2 -3
49 6 -2
50 3 2
51 5 1
52 5
53 0 1
54 2 1
55 4 0
56 2 3
57 5 4
58 10
59 */

 

HHHOJ 2018.10.4 ACM 造桥

标签:两种   image   click   ble   函数   flag   isp   i++   思路   

原文地址:https://www.cnblogs.com/GREED-VI/p/9744789.html

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