QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#783980 | #9530. A Game On Tree | Dixiky_215 | WA | 4ms | 5772kb | C++20 | 2.8kb | 2024-11-26 12:31:09 | 2024-11-26 12:31:12 |
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;
}
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*work(siz[x]-siz[y]-1LL)*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(siz[x]-siz[y])-(sumg-work(siz[y]));
sss%=mod;
sss*=num;sss%=mod;
ans+=sss;ans%=mod;
}
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=918384806LL;
// cerr<<ans<<" "<<(sss*100LL)%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
5
1 2
1 5
3 2
4 2
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: 1ms
memory: 5680kb
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 284165062 843424050 304248860 887328316 969534518 479184791 815849091 306128270 613246533 370097398 557784440 948948337 433351719 128600358 680516117 239547836 698771049 892149955 639615828 397897145 488030574 108697720 ...
result:
wrong answer 2nd lines differ - expected: '468414020', found: '569475948'