洛谷P1522牛的旅行——floyd

题目:https://www.luogu.org/problemnew/show/P1522

懒于仔细分情况而直接像题解那样写floyd然后不明白最后一步max的含义了...

分开考虑怎么保证在一个内呢?如果新连边的min与原直径的max在三个连通块里怎么办?

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
double const inf=0x3f3f3f3f;
int n,xx[155],yy[155],col[155],cr;
double dis[155][155],ans,mx[155],as,s[155];
double cal(int i,int j)
{
    return sqrt(1.0*(xx[i]-xx[j])*(xx[i]-xx[j])+1.0*(yy[i]-yy[j])*(yy[i]-yy[j]));
}
//void dfs(int x)
//{
//    col[x]=cr;
//    for(int i=1;i<=n;i++)
//        if(i!=x&&dis[i][x]!=inf&&!col[i])dfs(i);
//}
int main()
{
    scanf("%d",&n);
    ans=inf;
    for(int i=1;i<=n;i++)
        scanf("%d%d",&xx[i],&yy[i]);
    int d;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            scanf("%1d",&d);//
            if(d==1)dis[i][j]=cal(i,j);
            else if(i!=j)dis[i][j]=inf;
        }
//    for(int i=1;i<=n;i++)
//        if(!col[i])cr++,dfs(i);
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(dis[i][j]!=inf)
            {
                mx[i]=max(mx[i],dis[i][j]);
                as=max(as,dis[i][j]);
            }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(dis[i][j]==inf)ans=min(ans,mx[i]+mx[j]+cal(i,j));
    printf("%.6lf",max(ans,as));
    return 0;
}

原文地址:https://www.cnblogs.com/Zinn/p/8954462.html

时间: 2024-10-11 06:10:39

洛谷P1522牛的旅行——floyd的相关文章

洛谷1522 牛的旅行

本题地址:http://www.luogu.org/problem/show?pid=1522 题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个牧场了. John想在牧场里添加一条路径(注意,恰好一条).对这条路径有以下限制: 一个牧场的直径就是牧场中最远的两个牧区的距离(本题中所提到的所有距离指的都是最短的距离).考虑如下的有5个牧区的牧场,牧

洛谷P1027 Car的旅行路线

洛谷P1027 Car的旅行路线 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单位里程价格为Ti,任意两个不同城市的机场之间均有航线,所有航线单位里程的价格均为t. 图例(从上而下) 机场 高速铁路 飞机航线 注意:图中并没有 标出所有的铁路与航线. 那么Car应如何安排到城市B的路线才能尽可能的节省花费呢?她发现这并不是一个简单的问题,于是她来

洛谷P1565 牛宫

洛谷P1565 牛宫 题目描述 AP 神牛准备给自己盖一座很华丽的宫殿.于是,他看中了一块N*M 的矩形空地. 空地中每个格子都有自己的海拔高度.AP 想让他的宫殿的平均海拔在海平面之上(假设 海平面的高度是0,平均数都会算吧?).而且,AP 希望他的宫殿尽量大,能够容纳更 多的人来膜拜他.请问AP 的宫殿最后会有多大? 输入输出格式 输入格式: 第一行为N 和M.之后N 行,每行M 个数,描述的空地的海拔. 输出格式: 输出一行,表示宫殿最大面积. 输入输出样例 输入样例: 3 24 0-10

洛谷P1119 灾后重建(floyd)

P1119 灾后重建 题目背景 B地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响.但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车.换句话说,只有连接着两个重建完成的村庄的公路才能通车,只能到达重建完成的村庄. 题目描述 给出B地区的村庄数N,村庄编号从0到N-1,和所有M条公路的长度,公路是双向的.并给出第i个村庄重建完成的时间t[i],你可以认为是同时开始重建并在第t[i]天重建完成,并且在当天即可通车.若t[i]为0则说明地震未对此地区造成损坏,一

洛谷P1027 Car的旅行路线 计算几何 图论最短路

题意 求某城到某城的最小花费 一个城中有四个机场,一个城中的机场相互可达,用公路到达,但是不同城的公路的单位路程的费不同,两个不同城的机场(我不知道相同城可不可以)可以通过机场到达,且飞机单位路程价格一定,问从 a 城到b城的最小花费,可从a的任一机场出发,从 b 的任一机场结束 . 题解 这道题思路还算容易,就是求最短路,只是建图比较麻烦, 总体思路 1.建图(1) 相同城 的四个机场两两连线 求距离, [1]但是他只给出了三个点,也就是说这第四个点要我们自己求 首先他给出三个点,这三个点一定

洛谷P1364 医院设置(Floyd)

题目描述 设有一棵二叉树,如图: 其中,圈中的数字表示结点中居民的人口.圈边上数字表示结点编号,现在要求在某个结点上建立一个医院,使所有居民所走的路程之和为最小,同时约定,相邻接点之间的距离为l.如上图中, 若医院建在1 处,则距离和=4+12+2*20+2*40=136:若医院建在3 处,则距离和=4*2+13+20+40=81…… 输入输出格式 输入格式: 第一行一个整数n,表示树的结点数.(n≤100) 接下来的n行每行描述了一个结点的状况,包含三个整数,整数之间用空格(一个或多个)分隔,

洛谷 P4212 外太空旅行

题目描述 在人类的触角伸向银河系的边缘之际,普通人上太空旅行已经变得稀松平常了.某理科试验班有n个人,现在班主任要从中选出尽量多的人去参加一次太空旅行活动. 可是n名同学并不是和平相处的.有的人,比如小A和小B整天狼狈为奸,是好朋友:但还有的人,比如(政治敏感)和(政治敏感)就水火不相容.这n名同学,由于是理科生,都非常的理性,所以"朋友的朋友就是朋友"和"敌人的朋友就是敌人"这两句话对这些同学无效.换句话说,有可能小A和小B是朋友,小B和小C是朋友,但是小A和小C

[NOIP2001] 提高组 洛谷P1027 Car的旅行路线

题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个 矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速铁路,第I个城市中高速铁路了的单位里程价格为Ti,任意两个不同城市的机场之间均有航线, 所有航线单位里程的价格均为t. 图例(从上而下) 机场 高速铁路 飞机航线 注意:图中并没有 标出所有的铁路与航线. 那么Car应如何安排到城市B的路线才能尽可能的节省花费呢?她发现这并不是一个简单的问题,于是她来向你请教. 找出一条从城市A到

Luogu P1522 牛的旅行 Cow Tours

题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个牧场了. John想在牧场里添加一条路径(注意,恰好一条).对这条路径有以下限制: 一个牧场的直径就是牧场中最远的两个牧区的距离(本题中所提到的所有距离指的都是最短的距离).考虑如下的有5个牧区的牧场,牧区用“*”表示,路径用直线表示.每一个牧区都有自己的坐标: (15,15) (20,15) D