QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#687728 | #9530. A Game On Tree | Mu_Silk# | RE | 0ms | 0kb | C++20 | 2.6kb | 2024-10-29 20:53:22 | 2024-10-29 20:53:23 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=4010;
ll Mod=998244353;
ll n,f[100009][3],g[100009][3],ans,siz[100009],cc[100009];
vector<ll> es[100009];
ll quick_pow(ll a,ll b){
ll ans=1;
while(b){
if(b&1)ans=ans*a%Mod;
a=a*a%Mod;
b>>=1;
}
return ans;
}
ll dfs(ll x,ll fa){
siz[x]=1;
ll addx=0;
for(ll i:es[x]){
if(i==fa) continue;
dfs(i,x);
siz[x]+=siz[i];
ll u[3],v[3];
u[0]=siz[i]*siz[i];
u[0]%=Mod;
u[1]=f[i][1]+siz[i]*siz[i];
u[1]%=Mod;
u[2]=f[i][2]+2*f[i][1]+siz[i]*siz[i];
u[2]%=Mod;
v[0]=g[i][0]+f[i][0]*2;
v[1]=g[i][1]+f[i][1]*2;
v[2]=g[i][2]+f[i][2]*2;
v[0]%=Mod;
v[1]%=Mod;
v[2]%=Mod;
ans+=2ll*u[1]*f[x][1]%Mod+u[2]*f[x][0]%Mod+u[0]*f[x][2]%Mod;
ans+=g[x][2]*siz[i]%Mod;
ans+=v[2]*(siz[x]-siz[i]-1)%Mod;
// ans+=2*u[2]*(siz[x]-siz[i]-1)%Mod;
// ans+=2*f[x][2]*siz[i]%Mod;
g[x][2]+=2*f[x][2]*siz[i]%Mod+2*u[2]*(siz[x]-siz[i]-1)%Mod;
// addx+=2ll*u[1]*f[x][1]%Mod+u[2]*f[x][0]%Mod+u[0]*f[x][2]%Mod;
ans%=Mod;
f[x][0]+=u[0];
f[x][1]+=u[1];
f[x][2]+=u[2];
cc[i]=u[2];
f[x][0]%=Mod;
f[x][1]%=Mod;
f[x][2]%=Mod;
g[x][0]+=v[0];
g[x][1]+=v[1];
g[x][2]+=v[2];
g[x][0]%=Mod;
g[x][1]%=Mod;
g[x][2]%=Mod;
}
//cout<<x<<" "<<addx<<'\n';
//cout<<x<<" "<<f[x][0]<<" "<<f[x][1]<<" "<<f[x][2]<<'\n';
//cout<<x<<" "<<g[x][0]<<" "<<g[x][1]<<" "<<g[x][2]<<'\n';
for(ll i:es[x]){
if(i==fa) continue;
// cout<<x<<" "<<i<<" "<<siz[x]<<" "<<siz[i]<<" "<<f[x][0]<<"\n";
ans+=cc[i]*( (siz[x]-siz[i]-1)*(siz[x]-siz[i]-1)-f[x][0]+siz[i]*siz[i])%Mod;
//cout<<" "<< (siz[x]-siz[i]-1)*(siz[x]-siz[i]-1)-f[x][0]+siz[x]*siz[x]<<'\n';
ans%=Mod;
}
ans+=f[x][2]+g[x][2];
ans%=Mod;
}
void solve(){
cin>>n;
ans=0;
for(ll i=1;i<=n;i++){
es[i].clear();
f[i][0]=f[i][1]=f[i][2]=0;
g[i][0]=g[i][1]=g[i][2]=0;
}
for(ll i=1;i<n;i++){
ll u,v;
cin>>u>>v;
es[u].push_back(v);
es[v].push_back(u);
}
dfs(1,0);
ll u=(n)*(n-1)/2;
u*=u;
// cout<<ans<<'\n';
cout<<ans*quick_pow(u,Mod-2)%Mod<<'\n';
// cout<<918384806*u%Mod;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n=1;
cin>>n;
while(n--)solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Runtime Error
input:
2 3 1 2 2 3 5 1 2 1 5 3 2 4 2