QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#687780#9530. A Game On TreeMu_Silk#WA 3ms9736kbC++202.6kb2024-10-29 21:11:392024-10-29 21:11:39

Judging History

This is the latest submission verdict.

  • [2024-10-29 21:11:39]
  • Judged
  • Verdict: WA
  • Time: 3ms
  • Memory: 9736kb
  • [2024-10-29 21:11:39]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N=4010;

ll Mod=998244353;
ll n,f[100009][3],g[100009][3],ans,siz[100009],cc[100009];
vector<ll> es[100009];

ll quick_pow(ll a,ll b){
    ll ans=1;
    while(b){
        if(b&1)ans=ans*a%Mod;
        a=a*a%Mod;
        b>>=1;
    }
    return ans;
}


void dfs(ll x,ll fa){
    siz[x]=1;
    ll addx=0;
    for(ll i:es[x]){
        if(i==fa) continue;
        dfs(i,x);
        siz[x]+=siz[i];
        ll u[3],v[3];
        u[0]=siz[i]*siz[i];
        u[0]%=Mod;
        u[1]=f[i][1]+siz[i]*siz[i];
        u[1]%=Mod;
        u[2]=f[i][2]+2*f[i][1]+siz[i]*siz[i];
        u[2]%=Mod;
        v[0]=g[i][0]+f[i][0]*2;
        v[1]=g[i][1]+f[i][1]*2;
        v[2]=g[i][2]+f[i][2]*2;
        v[0]%=Mod;
        v[1]%=Mod;
        v[2]%=Mod;
        ans+=2ll*u[1]*f[x][1]%Mod+u[2]*f[x][0]%Mod+u[0]*f[x][2]%Mod;
        ans+=g[x][2]*siz[i]%Mod;
        ans+=v[2]*(siz[x]-siz[i]-1)%Mod;
      //  ans+=2*u[2]*(siz[x]-siz[i]-1)%Mod;
      //  ans+=2*f[x][2]*siz[i]%Mod;
        g[x][2]+=2*f[x][2]*siz[i]%Mod+2*u[2]*(siz[x]-siz[i]-1)%Mod;
       // addx+=2ll*u[1]*f[x][1]%Mod+u[2]*f[x][0]%Mod+u[0]*f[x][2]%Mod;
        ans%=Mod;
        f[x][0]+=u[0];
        f[x][1]+=u[1];
        f[x][2]+=u[2];
        cc[i]=u[2];
        f[x][0]%=Mod;
        f[x][1]%=Mod;
        f[x][2]%=Mod;
        g[x][0]+=v[0];
        g[x][1]+=v[1];
        g[x][2]+=v[2];
        
        g[x][0]%=Mod;
        g[x][1]%=Mod;
        g[x][2]%=Mod;
    }
    //cout<<x<<" "<<addx<<'\n';
    //cout<<x<<" "<<f[x][0]<<" "<<f[x][1]<<" "<<f[x][2]<<'\n';
    //cout<<x<<" "<<g[x][0]<<" "<<g[x][1]<<" "<<g[x][2]<<'\n';
    for(ll i:es[x]){
        if(i==fa) continue;
     //   cout<<x<<" "<<i<<" "<<siz[x]<<" "<<siz[i]<<" "<<f[x][0]<<"\n";
        ans+=cc[i]*(( (siz[x]-siz[i]-1)*(siz[x]-siz[i]-1)-f[x][0]+siz[i]*siz[i])%Mod)%Mod;
        //cout<<" "<< (siz[x]-siz[i]-1)*(siz[x]-siz[i]-1)-f[x][0]+siz[x]*siz[x]<<'\n';
        ans%=Mod;
    }
    ans+=f[x][2]+g[x][2];

    ans%=Mod;
}
void solve(){
    cin>>n;
    ans=0;
    for(ll i=1;i<=n;i++){
        es[i].clear();
        f[i][0]=f[i][1]=f[i][2]=0;
        g[i][0]=g[i][1]=g[i][2]=0;
    }
    for(ll i=1;i<n;i++){
        ll u,v;
        cin>>u>>v;
        es[u].push_back(v);
        es[v].push_back(u);
    }
    dfs(1,0);
    ll u=(n)*(n-1)/2%Mod;
    u*=u;
   // cout<<ans<<'\n';
    cout<<(ans*quick_pow(u,Mod-2)%Mod+Mod)%Mod<<'\n';
 //   cout<<918384806*u%Mod;
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int n=1;
     cin>>n;
    while(n--)solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 7728kb

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: 3ms
memory: 9736kb

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
468414020
550143557
918384806
711758412
487662742
776412276
869581749
322435679
765628773
38512516
887328316
969534518
721412588
760637552
908032643
508517959
885064723
534861792
221832080
433351719
865824185
640848228
593092711
698771049
296998322
485565774
240648194
590073330
979511868
6...

result:

wrong answer 9th lines differ - expected: '240852807', found: '322435679'