176. [USACO Feb07] 奶牛聚会

★☆   输入文件:sparty.in   输出文件:sparty.out   简单对比

时间限制:3 s   内存限制:16 MB

译: zqzas


N(1 ≤ N ≤ 1000)个农场中的每个农场都有一只奶牛去参加位于第X个农场的聚会.共有M (1 ≤ M ≤ 100,000)条单向的道路,每条道路连接一对农场.通过道路i会花费Ti (1 ≤ Ti ≤ 100)的时间.

作为参加聚会的奶牛必须走到聚会的所在地(农场X).当聚会结束时,还要返回各自的农场.奶牛都是很懒的,她们想找出花费时间最少的路线.由于道路都是单向的,所有她们前往农场X的路线可能会不同于返程的路线.

Of all the cows, what is the longest amount of time a cow must spend walking to the party and back? 对于所有参加聚会的奶牛,找出前往聚会和返程花费总时间最多的奶牛,输出这只奶牛花费的总时间.


输入格式:

  • 第1行:三个用空格隔开的整数.

第2行到第M+1行,每行三个用空格隔开的整数:Ai, Bi,以及Ti.表示一条道路的起点,终点和需要花费的时间.


输出格式:

  • 唯一一行:一个整数: 所有参加聚会的奶牛中,需要花费总时间的最大值.

样例输出:

4 8 2
1 2 4
1 3 2
1 4 7
2 1 1
2 3 5
3 1 2
3 4 4
4 2 3

样例输入:

10

样例说明:

共有4只奶牛参加聚会,有8条路,聚会位于第2个农场.

第4只奶牛可以直接到聚会所在地(花费3时间),然后返程路线经过第1和第3个农场(花费7时间),总共10时间.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
  
using namespace std;
const int N=1010;
const int INF=9999999;
  
int ma[N][N];
int answer[N];
int n,m,x;
  
inline int read()
{
    int x=0;char c=getchar();
    while(c<'0'||c>'9')c=getchar();
    while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
    return x;
}
  
int main()
{
    freopen("sparty.in","r",stdin);
    freopen("sparty.out","w",stdout);
    n=read(),m=read(),x=read();
     
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            ma[i][j]=INF;
    for(int i=1;i<=n;i++)
        ma[i][i]=0;
     
    for(int i=1;i<=m;i++)
    {
        int u=read(),v=read(),ti=read();
        ma[u][v]=ti;
    }
     
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                ma[i][j]=min(ma[i][j],ma[i][k]+ma[k][j]);
     
    for(int i=1;i<=n;i++)
        answer[i]+=ma[i][x]+ma[x][i];
     
    sort(answer+1,answer+n+1);
     
    printf("%d",answer[n]);
    return 0;
}

  

posted @   ioioioioioio  阅读(215)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示