QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#784226 | #9530. A Game On Tree | Dixiky_215 | WA | 4ms | 5772kb | C++20 | 2.9kb | 2024-11-26 14:11:20 | 2024-11-26 14:11:20 |
Judging History
answer
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=2e5+7;
int t,n;
int cnt=0,head[MAXN],to[MAXN],nxt[MAXN];
bool vis[MAXN];
ll sum1[MAXN],sum2[MAXN],siz[MAXN];
ll mod=998244353LL,ans;
ll ksm(ll x,ll y)
{
ll res=1LL;
while(y)
{
if(y&1LL) res=(res*x)%mod;
x=(x*x)%mod;y=y>>1LL;
}
return res;
}
ll inv(ll x)
{
return ksm(x%mod,mod-2LL);
}
ll work(ll x)
{
return (x*x)%mod;
}
void add(int x,int y)
{
to[++cnt]=y;
nxt[cnt]=head[x];
head[x]=cnt;
return;
}
void dfs(int x,int fa)
{
vis[x]=1;siz[x]=1LL;
ll sumg=0LL;
ll sumk1=0LL,sumk2=0LL;
for(int i=head[x];i;i=nxt[i])
{
int y=to[i];
if(vis[y]) continue;
dfs(y,x);
siz[x]+=siz[y];
sumg+=work(siz[y]);sumg%=mod;
sumk1+=sum1[y];sumk1%=mod;
sumk2+=sum2[y];sumk2%=mod;
sum1[x]+=sum1[y]+work(siz[y]);
sum1[x]%=mod;
sum2[x]+=sum2[y]+2LL*sum1[y]+work(siz[y]);
sum2[x]%=mod;
}
sumg+=work(n-siz[x]);sumg%=mod;
ll sumk=0LL;
// ans+=sum2[x];ans%=mod;
for(int i=head[x];i;i=nxt[i])
{
int y=to[i];
if(y==fa) continue;
ll sumy1=sum1[y],sumy2=sum2[y];
ll sumx1,sumx2;
sumx1=sumk1-sum1[y];
sumx1%=mod;
sumx2=sumk2-sum2[y];
sumx2%=mod;
ll sss,num;
num=sum2[y]+2LL*sum1[y]+work(siz[y]);num%=mod;
if(siz[x]-siz[y]>1)
{
sss=sumx2+sumy2+2LL*sumx1*sumy1%mod+4LL*sumx1+4LL*sumy1+4LL*(sumg-work(siz[y])-work(n-siz[x]))*work(siz[y])%mod;
sumk+=sss%mod;sumk%=mod;
}
// sss=num*((2LL*(siz[x]-siz[y])*((ll) n-siz[x]))%mod);
// ans+=sss%mod;ans%=mod;
sss=work(n-siz[y])-(sumg-work(siz[y]));
sss%=mod;
sss*=num;sss%=mod;
ans+=sss;ans%=mod;
// sss=work(n-siz[x]);
}
sumk=(sumk*inv(2LL))%mod;
ans+=sumk;ans%=mod;
return;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>t;
while(t--)
{
cin>>n;
for(int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
add(u,v);add(v,u);
}
ans=0LL;
dfs(1,0);
ll num=(ll) n*(ll) (n-1LL)%mod*inv(2LL);
num%=mod;
num=(num*num)%mod;
ll sss=468414020;
// cerr<<ans<<" "<<(sss*num)%mod<<" asd"<<endl;
ans=(ans*ksm(num,mod-2LL))%mod;
ans=(ans+mod)%mod;
cout<<ans<<'\n';
for(int i=0;i<=n;i++)
{
vis[i]=head[i]=0;
sum1[i]=sum2[i]=0LL;
}
for(int i=0;i<=cnt;i++)
{
to[i]=nxt[i]=0;
}
cnt=0;
}
return 0;
}
/*
1
12
5 7
10 7
2 10
11 2
1 7
8 1
4 2
9 11
6 9
12 11
3 5
2
3
1 2
2 3
5
1 2
1 5
3 2
4 2
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3600kb
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: 4ms
memory: 5772kb
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 569475948 550143557 918384806 230462027 487662742 776412276 869581749 840578581 843424050 341220873 887328316 674846185 138186720 815849091 306128270 165915730 567029957 326093158 948948337 433351719 775421954 236851960 347382874 698771049 394842768 35246654 46474388 22183209 137289410 889...
result:
wrong answer 2nd lines differ - expected: '468414020', found: '569475948'