結果
| 問題 |
No.2504 NOT Path Painting
|
| コンテスト | |
| ユーザー |
pockyny
|
| 提出日時 | 2024-10-19 16:55:07 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 254 ms / 2,000 ms |
| コード長 | 1,285 bytes |
| コンパイル時間 | 818 ms |
| コンパイル使用メモリ | 83,028 KB |
| 最終ジャッジ日時 | 2025-02-24 21:35:51 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 21 |
ソースコード
#include <iostream>
#include <atcoder/modint>
#include <vector>
using namespace std;
using namespace atcoder;
using mint = modint998244353;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t; cin >> t;
while(t){
t--;
int i,n; cin >> n;
vector<vector<int>> g(n);
for(i=0;i<n - 1;i++){
int u,v; cin >> u >> v; u--; v--;
g[u].push_back(v); g[v].push_back(u);
}
vector<mint> sz(n);
vector<int> par(n);
auto dfs = [&](auto &&self,int s,int p)-> void {
sz[s]++;
par[s] = p;
for(int v:g[s]){
if(v==p) continue;
self(self,v,s);
sz[s] += sz[v];
}
};
dfs(dfs,0,-1);
mint ans = 0;
mint al = (mint)n*(n + 1)/2;
for(i=0;i<n;i++){
mint p = al;
for(int x:g[i]){
if(x!=par[i]) p -= sz[x]*(sz[x] + 1)/2;
}
if(par[i]!=-1) p -= (n - sz[i])*(n - sz[i] + 1)/2;
ans += (mint)1/(mint)(1 - p/al);
}
for(i=1;i<n;i++){
mint p = sz[i]*((mint)n - sz[i])/al;
ans -= (mint)1/(mint)(1 - p);
}
cout << ans.val() << "\n";
}
}
pockyny