题意是给出一个不连通的图,然后定义了一个直径:联通分量里最短距离最长的两个点之间的距离。

求将一个不连通的图中的两个连通分量连接,生成的这个新分量的直径最小可以有多小,输出这个新直径。

做法是想用Floyd求出任意两点之间的最短距离,然后求出每个点到未生成新图之前的这个点所在分量的最远的一个点的距离。然后枚举联通两个不相连的两个点,这两个点的所在分量的最远距离,加上这两个点之间的距离,就是新生成的牧场的直径。

题目保证一定会有未联通的两个分量:

但是:这道题的第7个测试点我就是死活过不去,然后把这个数据分析了一下发现,这个测试点里的所有点都联通。

在此之前我还专门证明过,一个分量内部的直径一定小于两个分量相连之后新生成的分量的直径。结果题目这种测试数据和题目描述不一致坑的我什么都不想说了。

我就是想问一下人与人之间基本的信任呢

/*
ID: modengd1
PROG: cowtour
LANG: C++
*/
#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <math.h>
#define INF 0xfffffff
using namespace std;
typedef pair<int,int> Coor;
double longestdist[151];
double A[151][151];
Coor coor[151];
bool con[151][151];
int N;
void Floyd()
{//求任意间接联通的两点之间的最短路径,并标记它们之间的间接联通关系for(int k=0;k<N;k++){for(int i=0;i<N;i++){if(A[i][k]!=INF&&k!=i)for(int j=0;j<N;j++){if(A[k][j]!=INF&&k!=j){A[i][j]=min(A[i][j],A[i][k]+A[k][j]);con[i][j]=true;}}}}
}
double dis(Coor A,Coor B)
{return sqrt((A.first-B.first)*(A.first-B.first)+(A.second-B.second)*(A.second-B.second));
}
void slove()
{double ans=INF;//找到每个节点所在分量中离这个节点最远的一个坐标的距离for(int i=0;i<N;i++){for(int j=0;j<N;j++){if(con[i][j]){longestdist[i]=max(longestdist[i],A[i][j]);}}}//枚举任意两个不连通的点并且模拟将这两个点联通之后形成新牧场的直径for(int i=0;i<N-1;i++){for(int j=1+i;j<N;j++){if(!con[i][j]){ans=min(ans,longestdist[i]+longestdist[j]+dis(coor[i],coor[j]));}}}for(int i=0;i<N;i++)//处理假如数据已经全部连通了怎么办(题目强调一定有没连通的两个点,又碰见这种测试数据和题目描述不一样的我也是醉了ans=max(longestdist[i],ans);printf("%.6lf\n",ans);
}
int main()
{freopen("cowtour.in","r",stdin);freopen("cowtour.out","w",stdout);scanf("%d",&N);int a,b;char ch;for(int i=0;i<N;i++){scanf("%d%d",&a,&b);coor[i].first=a;coor[i].second=b;}getchar();for(int i=0;i<N;i++){for(int j=0;j<N;j++){scanf("%c",&ch);if(ch=='0')//判断是否直接联通并且初始化用来Floyd的A数组{con[i][j]=false;A[i][j]=INF;}else{con[i][j]=true;A[i][j]=dis(coor[i],coor[j]);}}getchar();con[i][i]=true;//自己到自己一定是联通的且距离为0A[i][i]=0;}Floyd();slove();return 0;
}

  

转载于:https://www.cnblogs.com/modengdubai/p/4786944.html

usaco Cow Tours相关推荐

  1. usaco Cow Tours 牛的旅行

    Cow Tours 牛的旅行 农民 John 的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场. 但是就目前而言,你能看到至少有两个牧区不连通.这样,农民 John 就有 ...

  2. 信息学奥赛一本通 1343:【例4-2】牛的旅行 | 洛谷 P1522 [USACO2.4] 牛的旅行 Cow Tours

    [题目链接] ybt 1343:[例4-2]牛的旅行 洛谷 P1522 [USACO2.4] 牛的旅行 Cow Tours [题目考点] 1. 图论 最短路径 Floyd算法 Floyd算法时间复杂度 ...

  3. USACO section2.4 Cow Tours题解代码

    把max()和min()用反了过了6组也是挺醉的,USACO数据也会这么水23333 一道写起来有点麻烦的题目,并查集+floyd就可以了- /* ID:rainbow16 LANG:C++ TASK ...

  4. 【USACO 2.3.4】Cow Tours 牛的旅行

    题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧场通过任何路径都不连通.这样,Farmer John就有多个 ...

  5. usaco Cow Pedigrees

    已经到了不看题解无法下手的程度了.我根本想不到这是dp......不过我发现nocow这个东西挺好的上面提供了解题思路说的很详细往往一题给好几种方法,我这题就是根据那上面来的. /* ID:jinbo ...

  6. p1522 牛的旅行 Cow Tours

    传送门 题目 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有 ...

  7. USACO2.4のP1522-牛的旅行(Cow Tours)【最短路Flody】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1522 题目大意 有n个点,连接任意两个不同联通块上的点,使这个新的 ...

  8. USACO / Cow Pedigrees(DP)

    农民约翰准备购买一群新奶牛. 在这个新的奶牛群中, 每一个母亲奶牛都生两个小奶牛.这些奶牛间的关系可以用二叉树来表示.这些二叉树总共有N个节点(3 <= N < 200).这些二叉树有如下 ...

  9. P1522 牛的旅行 Cow Tours(floyd)

    给你平面上的一些点,一开始有一些点是相连的,相连的边权是两点间的欧几里得距离,输入数据保证至少存在一组互相不相连的点 把相连的点叫做一个联通块,一个联通块的直径是其中任意两点间最短路长度的最大值 现在 ...

最新文章

  1. 常量和指针(Pointers and Constants)
  2. 《php入门很简单,PHP入门速成(1)
  3. 《openssl编程》之基础知识
  4. Dalvik/ART(ANDROID)中的多线程机制(4)
  5. 即将从TechReady5归来
  6. LeetCode 167. 两数之和 II - 输入有序数组 思考分析
  7. 51Nod 1043 幸运号码
  8. php对象好用吗,在数据库中使用对象的好处_php
  9. 深度学习入门|第5章 误差反向传播法(二)
  10. silverlight 不可
  11. Understanding glibc malloc - ptmalloc
  12. Fiddler(FD)抓包工具汉化版及使用方法
  13. 使用excel绘制统计分布表(T分布表)
  14. 服务器连交换机配置lacp协议,LACP(链路聚合控制协议)
  15. vscode 下载加速方法
  16. 软件详细设计文档(终)
  17. Latex 公式左对齐
  18. 日常收支记账,使用图表查看类别收支
  19. MySQL 中删除重复数据只保留一条
  20. Unity摄像机拍照并显示在小窗口里(RenderTexture和RawImage将摄像机图像渲染到GUI屏幕上小图显示)

热门文章

  1. 转载 - 最近对问题
  2. 粘贴复制Android复制和粘贴的实现
  3. C# 类(14) 事件
  4. 如何看Linux服务器是否被攻击
  5. Spring Boot集成Druid监控
  6. python函数不同类型参数顺序
  7. Node js开发中的那些旮旮角角 第一部
  8. 关于html的一些杂技
  9. [你必须知道的异步编程]——异步编程模型(APM)
  10. 熊猫分发_熊猫新手:第二部分