P1265 公路修建 洛谷
2017-04-08 16:54
267 查看
https://www.luogu.org/problem/show?pid=1265
题目描述
某国有n个城市,它们互相之间没有公路相通,因此交通十分不便。为解决这一“行路难”的问题,政府决定修建公路。修建公路的任务由各城市共同完成。
修建工程分若干轮完成。在每一轮中,每个城市选择一个与它最近的城市,申请修建通往该城市的公路。政府负责审批这些申请以决定是否同意修建。
政府审批的规则如下:
(1)如果两个或以上城市申请修建同一条公路,则让它们共同修建;
(2)如果三个或以上的城市申请修建的公路成环。如下图,A申请修建公路AB,B申请修建公路BC,C申请修建公路CA。则政府将否决其中最短的一条公路的修建申请;
#include <algorithm> #include <iostream> #include <cstdio> #include <cmath> #define N 5233 #define maxn 1e7 using namespace std; bool vis ; double minn,cnt; double d ,ans; int n,x ,y ,k; double count(int i,int j) { return sqrt((double)(x[i]-x[j])*(x[i]-x[j])+(double)(y[i]-y[j])*(y[i]-y[j])); } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]); for(int i=2;i<=n;i++) d[i]=count(1,i); d[1]=0;vis[1]=1; for(int i=1;i<n;i++) { minn=maxn; for(int j=1;j<=n;j++) if(!vis[j]&&minn>d[j]) { minn=d[j]; k=j; } vis[k]=1;ans+=minn; for(int j=1;j<=n;j++) { cnt=count(k,j); if(!vis[j]&&d[j]>cnt) d[j]=cnt; } } printf("%.2lf",ans); return 0; }稀里哗啦改了一通~~~AC 恶心~~~
相关文章推荐
- 洛谷 P1265 公路修建
- 洛谷 [P1265] 公路修建
- 洛谷 P1265 公路修建
- 洛谷P1265 公路修建
- 洛谷P1265 公路修建
- 洛谷P1265 公路修建
- [P1265]公路修建
- P1265 公路修建
- [洛谷1265] 公路修建 - prim
- 洛谷1265 公路修建
- P1265 公路修建 (prim)
- LG-P1265 公路修建
- 洛谷1265 公路修建
- BZOJ1196: [HNOI2006]公路修建问题
- 【BZOJ 1196】 [HNOI2006]公路修建问题
- CODEVS 3000公路修建问题
- 公路修建
- 8.23 bzoj1196[HNOI2006]公路修建问题
- |洛谷|图论生成树|P1111 修复公路
- BZOJ1196 [HNOI2006]公路修建问题 【二分 + Kruskal】