QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#784226#9530. A Game On TreeDixiky_215WA 4ms5772kbC++202.9kb2024-11-26 14:11:202024-11-26 14:11:20

Judging History

This is the latest submission verdict.

  • [2024-11-26 14:11:20]
  • Judged
  • Verdict: WA
  • Time: 4ms
  • Memory: 5772kb
  • [2024-11-26 14:11:20]
  • Submitted

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'