csu---建食堂

来源:互联网 发布:不能在淘宝上买球藻 编辑:程序博客网 时间:2024/04/27 18:15

Description

给出n个公寓

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;#define maxx 1e9int n,m,dis[101][101];int floyd(){    for(int k=0; k<n; k++)    {        for(int i=0; i<n; i++)        {            for(int j=0; j<n; j++)            {                dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);            }        }    }    for(int i=0; i<n; i++)    {        dis[i][n]=0;        for(int j=0; j<n; j++)        {            dis[i][n]=max(dis[i][n],dis[i][j]);            if(dis[i][n]==maxx)                return 0;        }    }    return 1;}int main(){    while(~scanf("%d %d",&n,&m))    {        for(int i=0; i<n; i++)        {            for(int j=0; j<n; j++)            {                if(i==j)                    dis[i][j]=0;                else                    dis[i][j]=maxx;            }        }        int a,b,c;        for(int i=0;i<m;i++)        {            scanf("%d %d %d",&a,&b,&c);            dis[a][b]=c;            dis[b][a]=c;        }        int ok=floyd();        int ans=maxx;        for(int i=0;i<n;i++)            ans=min(ans,dis[i][n]);        if(ok)            printf("%d\n",ans);        else            printf("Can not\n");    }    return 0 ;}

的互相距离,选择在其中一个公寓楼下建食堂,要求食堂到最远的公寓的距离最短。

Input

每组数据第一行为两个正整数n,m。

n表示公寓数,m表示可彼此直达的公寓对。

接下来m行每行给出两个彼此可直达的公寓i、j和它们之间的距离k。

2 <= n <= 100,0 <= m < (n - 1) * n / 2,0 <= i,j < n,0 < k < 10000。

Output

输出一行一个整数表示建好的食堂到最远的公寓的距离。

若无法建一个能到所有公寓的食堂,输出can not。

Sample Input

3 20 2 00 1 95 33 4 82 4 10 2 0

Sample Output

直接上floyd算法吧

9Can not
原创粉丝点击