結果

問題 No.3564 Awkward Timing
コンテスト
ユーザー GOTKAKO
提出日時 2026-05-30 00:27:19
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 148 ms / 2,000 ms
コード長 1,244 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,475 ms
コンパイル使用メモリ 218,292 KB
実行使用メモリ 35,676 KB
最終ジャッジ日時 2026-05-30 00:27:30
合計ジャッジ時間 10,258 ms
ジャッジサーバーID
(参考情報)
judge3_1 / judge2_1
純コード判定待ち
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
部分点1 40 % AC * 38
満点 60 % AC * 62
合計 100 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
 
    long long N,M,K; cin >> N >> M >> K;
    vector<vector<pair<int,long long>>> Graph(N);
    for(int i=0; i<M; i++){
        int u,v; cin >> u >> v;
        u--; v--;
        long long w; cin >> w;
        Graph.at(u).push_back({v,w%K});
        Graph.at(v).push_back({u,w%K});
    }   
    while(true){
        vector<long long> dist(N,-1);
        dist.at(0) = 0;
        long long loop = 0;
        auto dfs = [&](auto dfs,int pos) -> void {
            long long d = dist.at(pos);
            for(auto [to,w] : Graph.at(pos)){
                long long now = d+w;
                if(now >= K) now -= K;
                if(dist.at(to) == -1){
                    dist.at(to) = now;
                    dfs(dfs,to);
                    if(loop) return;
                }
                else if(dist.at(to) != now){
                    loop = abs(dist.at(to)-now);
                    return;
                }
            }
        };
        dfs(dfs,0);
        if(loop == 0){cout << dist.at(N-1) << "\n"; break;}
        K = gcd(K,loop);
        for(int i=0; i<N; i++) for(auto &[to,w] : Graph.at(i)) w %= K;
    }
}
0