| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 14455 | Accepted: 6511 |
Description
One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads connects pairs of farms; road i requires Ti (1 ≤ Ti ≤ 100) units of time to traverse.
Each cow must walk to the party and, when the party is over, return to her farm. Each cow is lazy and thus picks an optimal route with the shortest time. A cow's return route might be different from her original route to the party since roads are one-way.
Of all the cows, what is the longest amount of time a cow must spend walking to the party and back?
Input
Lines 2..M+1: Line i+1 describes road i with three space-separated integers: Ai, Bi, and Ti. The described road runs from farm Ai to farm Bi, requiring Ti time units to traverse.
Output
Sample Input
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
Sample Output
10
Hint
#include<stdio.h>
#define M 99999999
int map[1002][1002]={0},mapp[1002][1002]={0};
int d[1002],dt[1002];
void dijistra(int d[],int g[][1002],int n,int v)
{
int i,j;
int ss[1002];
int min;
int u;
for(i=1;i<=n;i++)
{
d[i]=M;
ss[i]=0;
}
d[v]=0;
for(i=1;i<=n;i++)
{
min=M;
for(j=1;j<=n;j++)
{
if(ss[j]==0&&d[j]<min)
{
min=d[j];
u=j;
}
}
ss[u]=1;
for(j=1;j<=n;j++)
{
if(d[u]+g[u][j]<d[j])
{
d[j]=d[u]+g[u][j];
}
}
}
}
int main()
{
int i,j,n,edge,party,cost,u,v;
int max;
scanf("%d %d %d",&n,&edge,&party);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
map[i][j]=M;
mapp[i][j]=M;
}
for(i=0;i<=edge;i++)
{
scanf("%d%d",&u,&v);
scanf("%d",&map[u][v]);
mapp[v][u]=map[u][v];
}
dijistra(d,map,n,party);
dijistra(dt,mapp,n,party);
max=0;
for(i=1;i<=n;i++)
{
if(max<d[i]+dt[i])
max=d[i]+dt[i];
}
printf("%d",max);
return 0;
}不是很会,仿照的写的,感觉迪杰斯特拉还是不怎么好写,理解起来还好

该问题涉及计算在存在单向道路的N个农场网络中,奶牛从各自的农场前往编号为X的农场参加聚会,然后返回的最长时间。每个农场之间的路程可能不同,每个奶牛会选择最短路径。输出所有奶牛中花费时间最长的一头奶牛的往返总时间。
293

被折叠的 条评论
为什么被折叠?



