HDU 2066一人旅(最短経路)
18131 ワード
一人旅
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 18343 Accepted Submission(s): 6372
Problem Description
草は方向音痴(杭電に1年以上いたのに、校庭で道に迷った人、汗~)だが、草は旅行が大好きで、旅の途中でたくさんの人に出会うから(白馬王子、^0^)ああ、いろいろなことがあって、自分の経験を豊かにすることができて、きれいな景色を见ることができます......草はとても多くの地方に行きたいです.彼女は东京タワーに行って夜景を见に行きたいです.ベネチアに行って映画を见に行きます.阳明山に行って芋を见に行きます.ニューヨークに行って雪の景色を见に行きます.パリに行ってコーヒーを饮んで手纸を书きます.ああ、ちゃんと休みを取ってあげなきゃいけないんだけど、訓練をおろそかにしちゃいけないんだから、草は一番短い時間で行きたいところに行くことにしたんだよ.草の家は小さな町にあって列車が通っていないから、隣の町に行くだけで汽車に乗れたんだよ(かわいそうだね~).
Input
入力データには複数のグループがあり、各グループの最初の行は3つの整数T、S、Dであり、T本の道があり、草の家と隣接する都市にはS個、草の行きたい場所にはD個があることを示している.
次にT行があり、各行に3つの整数a,b,timeがあり、a,b都市間の車の距離がtime時間であることを示す.(1=<(a,b)<=1000;a,b間に複数の道がある可能性がある)
続くT+1行目にはS個数があり、草児家とつながっている都市を表す.
次のT+2行目にD個の数があり、草が地方に行きたいことを表す.
Output
草を出してある好きな都市に行ける最短時間.
Sample Input
Sample Output
Author
Grass
Source
RPG特別練習試合
Recommend
lcy | We have carefully selected several similar problems for you:
1874
2112
1217
1142
1385
コード:78 MS
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 18343 Accepted Submission(s): 6372
Problem Description
草は方向音痴(杭電に1年以上いたのに、校庭で道に迷った人、汗~)だが、草は旅行が大好きで、旅の途中でたくさんの人に出会うから(白馬王子、^0^)ああ、いろいろなことがあって、自分の経験を豊かにすることができて、きれいな景色を见ることができます......草はとても多くの地方に行きたいです.彼女は东京タワーに行って夜景を见に行きたいです.ベネチアに行って映画を见に行きます.阳明山に行って芋を见に行きます.ニューヨークに行って雪の景色を见に行きます.パリに行ってコーヒーを饮んで手纸を书きます.ああ、ちゃんと休みを取ってあげなきゃいけないんだけど、訓練をおろそかにしちゃいけないんだから、草は一番短い時間で行きたいところに行くことにしたんだよ.草の家は小さな町にあって列車が通っていないから、隣の町に行くだけで汽車に乗れたんだよ(かわいそうだね~).
Input
入力データには複数のグループがあり、各グループの最初の行は3つの整数T、S、Dであり、T本の道があり、草の家と隣接する都市にはS個、草の行きたい場所にはD個があることを示している.
次にT行があり、各行に3つの整数a,b,timeがあり、a,b都市間の車の距離がtime時間であることを示す.(1=<(a,b)<=1000;a,b間に複数の道がある可能性がある)
続くT+1行目にはS個数があり、草児家とつながっている都市を表す.
次のT+2行目にD個の数があり、草が地方に行きたいことを表す.
Output
草を出してある好きな都市に行ける最短時間.
Sample Input
6 2 3
1 3 5
1 4 7
2 8 12
3 8 4
4 9 12
9 10 2
1 2
8 9 10
Sample Output
9
Author
Grass
Source
RPG特別練習試合
Recommend
lcy | We have carefully selected several similar problems for you:
1874
2112
1217
1142
1385
コード:78 MS
#include<stdio.h>
#include<string.h>
#define INF 1000000
#define maxn 1100
int want[maxn]; int map[maxn][maxn]; int near[maxn]; int mark[maxn]; int dis[maxn]; int mc; void dijkstra(int x) { int i,j,k,minx;
memset(mark,0,sizeof(mark));// , 。
for(i=0;i<=mc;i++)
dis[i]=map[x][i];// x i dis[i]。
mark[x]=1;// x
dis[x]=0;// x 。
for(i=1;i<=mc;i++) {
minx=INF; for(j=0;j<=mc;j++) { if(mark[j]==0 && dis[j]<minx)// , 。
{
minx=dis[j];
k=j; } }
mark[k]=1; for(j=0;j<=mc;j++) { if(mark[j]==0 && dis[j]>dis[k]+map[k][j]) // 。
{
dis[j]=dis[k]+map[k][j]; } } } } int main() { int min,i,j,a,b,c,t,s,d; while(scanf("%d%d%d",&t,&s,&d)!=EOF) {
min=INF;
mc=0; for(i=0;i<maxn;i++) { for(j=0;j<maxn;j++) { if(i==j)
map[i][j]=0; else map[i][j]=map[j][i]=INF;// 。
} } for(i=1;i<=t;i++) {
scanf("%d%d%d",&a,&b,&c); if(map[a][b]>c) {
map[a][b]=c;
map[b][a]=c; }
mc=(a>b?a:b)>mc?(a>b?a:b):mc;// , 。
} for(i=1;i<=s;i++) {
scanf("%d",&near[i]); } for(i=1;i<=s;i++) {
map[0][near[i]]=map[near[i]][0]=0; } for(i=1;i<=d;i++) {
scanf("%d",&want[i]); }
dijkstra(0); for(i=1;i<=d;i++) { if(dis[want[i]]<min) {
min=dis[want[i]]; } }
printf("%d
",min); } return 0; }