QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#698673#9530. A Game On TreeOkuchiriWA 2ms11948kbC++203.6kb2024-11-01 21:15:222024-11-01 21:15:23

Judging History

This is the latest submission verdict.

  • [2024-11-01 21:15:23]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 11948kb
  • [2024-11-01 21:15:22]
  • Submitted

answer

#include<bits/stdc++.h>
#define ll long long
#define mod 998244353
using namespace std;
ll n,siz[100010],mson[100010];
ll dfl[100010],dfr[100010];
ll dep[100010];
ll sum[100010];
ll inv[100010];
ll dfn,ans;
vector<ll>e[100010];
vector<ll>c[100010];
ll k0,k1,k2;
ll ksm(ll x,ll y)
{
    ll res=1;
    while(y)
    {
        if(y&1)res=res*x%mod;
        x=x*x%mod;
        y=y/2;
    }
    return res;
}
void dfs(ll x,ll pre)
{
    dep[x]=dep[pre]+1;
    dfn++;
    inv[dfn]=x;
    c[x].clear();
    dfl[x]=dfn;
    dfr[x]=dfn;
    siz[x]=1;
    for(auto y:e[x])
    {
        if(y==pre)continue;
        dfs(y,x);
        c[x].push_back(siz[y]);
        siz[x]+=siz[y];
        dfr[x]=dfr[y];
        if(mson[x]==0||siz[mson[x]]<siz[y])mson[x]=y;
    }
    c[x].push_back(n-siz[x]);
}
void dfs1(ll x,ll pre,ll keep)
{
    for(auto y:e[x])
    {
        if(y==pre||y==mson[x])continue;
        dfs1(y,x,0);
    }
    if(mson[x])
    {
        dfs1(mson[x],x,1);
        ll t=((sum[mson[x]]-(n-siz[mson[x]])*(siz[mson[x]]-1)%mod*2%mod+mod)%mod+(2*siz[mson[x]]-1))%mod;
        k2=(k2+2*k1+k0+t)%mod;
        k1=(k1+k0+t)%mod;
        k0=(k0+t)%mod;
    }
    for(auto y:e[x])
    {
        if(y==mson[x]||y==pre)continue;
        for(int j=dfl[y];j<=dfr[y];j++)
        {
            ll t=((sum[inv[j]]-(n-siz[inv[j]])*(siz[inv[j]]-1)%mod*2%mod+mod)%mod+(2*siz[inv[j]]-1)%mod)%mod;
            ll len=dep[inv[j]]-dep[x];
            ans=(ans+(t*k2%mod+2*t%mod*len%mod*k1%mod+t*k0%mod*len%mod*len%mod)%mod)%mod;
        }
        for(int j=dfl[y];j<=dfr[y];j++)
        {
            ll t=((sum[inv[j]]-(n-siz[inv[j]])*(siz[inv[j]]-1)%mod*2%mod+mod)%mod+(2*siz[inv[j]]-1)%mod)%mod;
            ll len=dep[inv[j]]-dep[x];
            k2=(k2+t*len%mod*len%mod)%mod;
            k1=(k1+t*len%mod)%mod;
            k0=(k0+t)%mod;
        }
    }
    if(keep==0)
    {
        for(auto y:e[x])
        {
            if(y==pre)continue;
            for(int j=dfl[y];j<=dfr[y];j++)
            {
                ll t=((sum[inv[j]]-(n-siz[inv[j]])*(siz[inv[j]]-1)%mod*2%mod+mod)%mod+(2*siz[inv[j]]-1)%mod)%mod;
                ll len=dep[inv[j]]-dep[x];
                k2=(k2-t*len%mod*len%mod+mod)%mod;
                k1=(k1-t*len%mod+mod)%mod;
                k0=(k0-t+mod)%mod;
            }
        }
    }
}
ll f0[100010],f1[100010],f2[100010];
void dfs2(ll x,ll pre)
{
    f2[x]=0;
    f1[x]=0;
    f0[x]=0;
    for(auto y:e[x])
    {
        if(y==pre)continue;
        dfs2(y,x);
        ans=(ans+(f2[y]+2*f1[y]+f0[y]+(sum[y]-(n-siz[y])*(siz[y]-1)%mod*2%mod)+2*siz[y]-1)%mod*(sum[x]-siz[y]*(n-siz[y]-1)%mod*2%mod+mod+2*(n-siz[y])-1)%mod);
        ll t=((sum[y]-(n-siz[y])*(siz[y]-1)%mod*2%mod+mod)%mod+(2*siz[y]-1))%mod;
        f2[x]=(f2[x]+f2[y]+2*f1[y]+f0[y]+t)%mod;
        f1[x]=(f1[x]+f1[y]+f0[y]+t)%mod;
        f0[x]=(f0[x]+t)%mod;
    }
}
void work()
{
    k0=0;k1=0;k2=0;
    cin>>n;
    dfn=0;ans=0;
    for(int i=1;i<=n;i++)e[i].clear(),mson[i]=0;
    for(int i=1;i<n;i++)
    {
        ll x,y;
        cin>>x>>y;
        e[x].push_back(y);
        e[y].push_back(x);
    }
    dfs(1,0);
    for(int i=1;i<=n;i++)
    {

        ll s=0;
        sum[i]=0;
        for(auto y:c[i])
        {
            sum[i]=(sum[i]+s*y%mod)%mod;
            s+=y;
        }
        sum[i]=sum[i]*2%mod;
    }
    dfs1(1,0,0);
    dfs2(1,0);
    ll t1=n*(n-1)%mod*ksm(2,mod-2)%mod;
    t1=t1*t1%mod;
    cout<<ans*ksm(t1,mod-2)%mod<<'\n';
}
signed main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int T;
    cin>>T;
    while(T--)
    {
        work();
    }
}

詳細信息

Test #1:

score: 100
Accepted
time: 2ms
memory: 11948kb

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: 0ms
memory: 9852kb

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:

380283565
42166431
146409174
89841993
720671308
169345027
776412276
97606116
951494620
482946923
234156085
367409382
814105397
969598684
472748810
633946786
878849197
584006902
451058562
600795214
201665529
370521821
652401982
545337194
399297743
37619789
472255849
365428738
310564911
739440263
7301...

result:

wrong answer 1st lines differ - expected: '948445317', found: '380283565'