結果

問題 No.160 最短経路のうち辞書順最小
コンテスト
ユーザー latte0119
提出日時 2015-03-02 00:53:29
言語 C++11
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=gnu++11 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
(最新)
AC  
(最初)
実行時間 -
コード長 832 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 225 ms
コンパイル使用メモリ 63,140 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2026-03-09 10:17:49
合計ジャッジ時間 1,313 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3 WA * 1
other AC * 5 WA * 21
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
int n,m,s,g;
int mat[300][300];
bool flag[300][300];
int main(){
    scanf("%d%d%d%d",&n,&m,&s,&g);
    fill_n(*mat,300*300,1<<25);
    fill_n(*flag,300*300,false);
    for(int i=0;i<n;i++)mat[i][i]=0;
    while(m--){
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        mat[a][b]=mat[b][a]=c;
        flag[a][b]=flag[b][a]=true;
    }
    for(int k=0;k<n;k++){
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                mat[i][j]=min(mat[i][j],mat[i][k]+mat[k][j]);
            }
        }
    }
    printf("%d",s);
    while(s!=g){
        for(int i=0;i<n;i++){
            if(mat[s][i]+mat[i][g]==mat[s][g]&&flag[s][i]){
                printf(" %d",s=i);
                break;
            }
        }
    }
    puts("");
}
0