結果
| 問題 | No.3564 Awkward Timing |
| コンテスト | |
| ユーザー |
jastaway
|
| 提出日時 | 2026-05-27 00:31:32 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 366 ms / 2,000 ms |
| コード長 | 1,590 bytes |
| 記録 | |
| コンパイル時間 | 8,373 ms |
| コンパイル使用メモリ | 452,836 KB |
| 実行使用メモリ | 56,436 KB |
| 最終ジャッジ日時 | 2026-05-29 18:46:27 |
| 合計ジャッジ時間 | 26,903 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge3_0 |
| 純コード判定待ち |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| 部分点1 | 40 % | AC * 38 |
| 満点 | 60 % | AC * 62 |
| 合計 | 100 点 |
ソースコード
#include "testlib.h"
#include <bits/stdc++.h>
using namespace std;
#include <atcoder/dsu>
using namespace atcoder;
using ll = long long;
const int MAX_N = 200'000;
const int MAX_M = 200'000;
const ll MAX_K = 1'000'000'000'000'000'000LL;
const ll INF = 1LL << 60;
template<class T, class U> bool chmin(T& a, U b) { return a > b ? a = b, 1 : 0; }
int main(int argc, char* argv[]) {
registerValidation(argc, argv);
int N = inf.readInt(1, MAX_N, "N");
inf.readSpace();
int M = inf.readInt(1, MAX_M, "M");
inf.readSpace();
ll K = inf.readLong(1, MAX_K, "K");
inf.readEoln();
vector<tuple<ll, int, int>> E;
for(int i = 0; i < M; i++)
{
int u = inf.readInt(1, N, "u_"+to_string(i));
inf.readSpace();
int v = inf.readInt(1, N, "v_"+to_string(i));
inf.readSpace();
ll t = inf.readLong(1, MAX_K, "t_"+to_string(i));
inf.readEoln();
u--; v--;
E.emplace_back(t, u, v);
}
inf.readEof();
sort(E.begin(), E.end());
dsu UF(N);
vector<vector<pair<int, ll>>> T(N);
for(auto [c, a, b] : E)
{
if(UF.same(a, b)) continue;
UF.merge(a, b);
T[a].emplace_back(b, c);
T[b].emplace_back(a, c);
}
vector<ll> dist(N);
auto dfs = [&](auto&& self, int n, int p, ll d)->void
{
dist[n] = d;
for(auto [e, c] : T[n]) if(e != p) self(self, e, n, (d + c)%K);
};
dfs(dfs, 0, -1, 0);
ll g = K;
for(auto [c, a, b] : E)
{
g = gcd(g, ((dist[a] + dist[b])%K + c)%K);
}
cout << dist[N-1]%g << endl;
}
jastaway