QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#783980#9530. A Game On TreeDixiky_215WA 4ms5772kbC++202.8kb2024-11-26 12:31:092024-11-26 12:31:12

Judging History

This is the latest submission verdict.

  • [2024-11-26 12:31:12]
  • Judged
  • Verdict: WA
  • Time: 4ms
  • Memory: 5772kb
  • [2024-11-26 12:31:09]
  • 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;
    }
    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'