QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#687780 | #9530. A Game On Tree | Mu_Silk# | WA | 3ms | 9736kb | C++20 | 2.6kb | 2024-10-29 21:11:39 | 2024-10-29 21:11:39 |
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;
}
void 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)%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%Mod;
u*=u;
// cout<<ans<<'\n';
cout<<(ans*quick_pow(u,Mod-2)%Mod+Mod)%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: 100
Accepted
time: 1ms
memory: 7728kb
input:
2 3 1 2 2 3 5 1 2 1 5 3 2 4 2
output:
443664158 918384806
result:
ok 2 lines
Test #2:
score: -100
Wrong Answer
time: 3ms
memory: 9736kb
input:
1000 7 3 6 4 3 5 3 2 6 1 4 7 1 12 5 7 10 7 2 10 11 2 1 7 8 1 4 2 9 11 6 9 12 11 3 5 6 2 5 1 2 4 5 6 4 3 6 5 2 5 1 5 4 5 3 2 8 1 8 2 8 4 2 6 1 5 6 7 6 3 8 8 3 8 7 3 4 8 6 4 2 7 5 2 1 4 4 3 1 4 3 2 1 6 5 1 6 1 2 5 3 5 4 2 12 8 11 5 11 12 8 3 12 6 12 2 3 4 6 10 11 1 5 9 5 7 5 9 6 1 7 6 4 7 8 7 5 4 9 6 ...
output:
948445317 468414020 550143557 918384806 711758412 487662742 776412276 869581749 322435679 765628773 38512516 887328316 969534518 721412588 760637552 908032643 508517959 885064723 534861792 221832080 433351719 865824185 640848228 593092711 698771049 296998322 485565774 240648194 590073330 979511868 6...
result:
wrong answer 9th lines differ - expected: '240852807', found: '322435679'