結果
| 問題 |
No.2531 Coloring Vertices on Namori
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-11-03 23:47:10 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 250 ms / 2,000 ms |
| コード長 | 2,102 bytes |
| コンパイル時間 | 2,564 ms |
| コンパイル使用メモリ | 219,496 KB |
| 最終ジャッジ日時 | 2025-02-17 18:59:39 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 31 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/modint>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
using namespace std;
using mint = atcoder::modint998244353;
int main() {
cin.tie(0); cout.tie(0);
ios::sync_with_stdio(false);
int N, K;
cin >> N >> K;
vector<int> u(N), v(N);
vector<vector<pair<int, int>>> G(N);
for(int i = 0; i < N; i++) {
cin >> u[i] >> v[i];
--u[i]; --v[i];
G[u[i]].push_back(make_pair(v[i], i));
G[v[i]].push_back(make_pair(u[i], i));
}
vector<int> seen(N, -1);
vector<bool> used(N, false);
seen[0] = 0;
queue<int> que;
que.push(0);
while(!que.empty()) {
int x = que.front();
que.pop();
for(pair<int, int> p : G[x]) {
int y = p.first;
int id = p.second;
if(seen[y] == -1) {
seen[y] = seen[x] + 1;
que.push(y);
used[id] = true;
}
}
}
vector<vector<int>> H(N);
for(int i = 0; i < N; i++) {
if(used[i]) {
H[u[i]].emplace_back(v[i]);
H[v[i]].emplace_back(u[i]);
}
}
if(K == 2) {
for(int i = 0; i < N; i++) {
if(!used[i]) {
if(seen[u[i]] % 2 != seen[v[i]] % 2) {
cout << 2 << '\n';
} else {
cout << 0 << '\n';
}
}
}
} else {
for(int i = 0; i < N; i++) {
if(!used[i]) {
vector<int> dep(N, -1);
dep[u[i]] = 1;
vector<vector<mint>> dp(N, vector<mint>(2));
dp[u[i]][0] = 1;
dp[u[i]][1] = 0;
que.push(u[i]);
while(!que.empty()) {
int x = que.front();
que.pop();
for(int y : H[x]) {
if(dep[y] == -1) {
que.push(y);
dep[y] = dep[x] + 1;
dp[y][0] += dp[x][1];
dp[y][1] += dp[x][0] * (K - 1);
dp[y][1] += dp[x][1] * (K - 2);
}
}
}
int d = dep[v[i]];
mint ans = mint(K) * mint(K - 1).pow(N - 1);
mint rem = mint(K) * mint(K - 1).pow(N - d) * dp[v[i]][0];
ans -= rem;
cout << ans.val() << '\n';
}
}
}
return 0;
}