QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#689555#9530. A Game On TreebnxcvdRE 0ms0kbC++143.2kb2024-10-30 17:43:332024-10-30 17:43:33

Judging History

This is the latest submission verdict.

  • [2024-10-30 17:43:33]
  • Judged
  • Verdict: RE
  • Time: 0ms
  • Memory: 0kb
  • [2024-10-30 17:43:33]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef tuple<int, int, int> tii;

inline int rd() {
    int x = 0;
    bool f = 0;
    char c = getchar();
    for (; !isdigit(c); c = getchar()) f |= (c == '-');
    for (; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);
    return f ? -x : x;
}

#define eb emplace_back
#define all(s) (s).begin(), (s).end()
#define rep(i, a, b) for (int i = (a); i <= (b); ++i)
#define per(i, a, b) for (int i = (a); i >= (b); --i)

const int maxn=1e5+10;
const int mod=998244353;

int n,dp[maxn][2],siz[maxn],ans[maxn],sp[maxn];
vector<int>G[maxn];

int qpow(int a,int b) {
    int res=1;
    while(b) {
        if(b&1) res=1ll*res*a%mod;
        a=1ll*a*a%mod;
        b>>=1;
    }
    return res;
}

int inv(int a) {
    return qpow(a,mod-2);
}

int dfs(int u,int fa) {
    siz[u]=1;
    vector<int>son,v1,v2,P;
    for(auto v:G[u]) {
        if(v==fa) continue;
        dfs(v,u);
        siz[u]+=siz[v];
    }
    int tot=0;
    for(auto v:G[u]) {
        if(v==fa) continue;
        son.push_back(v);
        int pos=1ll*(1ll*siz[v]*siz[v]%mod)*inv(1ll*siz[u]*siz[u]%mod)%mod;
        int iu1,iu2;
        iu1=1ll*pos*(dp[v][0]+1)%mod;
        v1.push_back(iu1);
        dp[u][0]=(dp[u][0]+iu1)%mod;
        iu2=1ll*pos*((dp[v][1]+2ll*dp[v][0]%mod)%mod+1)%mod;
        v2.push_back(iu2);
        dp[u][1]=(dp[u][1]+iu2)%mod;
        P.push_back(pos);
        tot=(tot+pos)%mod;
    }
    for(int i=0;i<(int)v1.size();i++) {
        ans[u]=(ans[u]+1ll*v2[i]*(tot-P[i]+mod)%mod)%mod;
        ans[u]=(ans[u]+1ll*P[i]*(dp[u][1]-v2[i]+mod)%mod)%mod;
        ans[u]=(ans[u]+2ll*v1[i]*(dp[u][0]-v1[i]+mod)%mod)%mod;
        
        ans[u]=(ans[u]+1ll*v2[i]*(tot-P[i]+mod)%mod)%mod;
        ans[u]=(ans[u]+1ll*P[i]*(dp[u][1]-v2[i]+mod)%mod)%mod;
        ans[u]=(ans[u]+2ll*v1[i]*(dp[u][0]-v1[i]+mod)%mod)%mod;

        int U=1ll*(siz[u]-siz[son[i]])*(siz[u]-siz[son[i]])%mod;
        U=1ll*U*inv(1ll*siz[u]*siz[u]%mod)%mod;
        
        ans[u]=(ans[u]+4ll*(((U-tot+P[i])%mod+mod)%mod)%mod*v2[i]%mod%mod)%mod;
        
        sp[u]=(sp[u]+2ll*(siz[u]-siz[son[i]])%mod*inv(siz[u])%mod*v2[i]%mod)%mod;
    }
}

int main() {
    int T=rd();
    while(T--) {
        n=rd();
        for(int i=1;i<=n;i++) {
            siz[i]=0;
            dp[i][0]=dp[i][1]=0;
            G[i].clear();
            ans[i]=0;
            sp[i]=0;
        }
        for(int i=1,u,v;i<n;i++) {
            u=rd();
            v=rd();
            G[u].push_back(v);
            G[v].push_back(u);
        }
        dfs(1,0);
        int Ans=0;
        for(int i=1;i<=n;i++){
        	ans[i]=1ll*ans[i]*siz[i]%mod*siz[i]%mod*siz[i]%mod*siz[i]%mod;
        	ans[i]=1ll*ans[i]*inv(1ll*n*n%mod*(n-1)%mod*(n-1)%mod)%mod;
        	Ans=(Ans+ans[i])%mod;
        	int res=1ll*sp[i]*siz[i]%mod*siz[i]%mod*siz[i]%mod*inv(1ll*n*n%mod*n%mod)%mod;
        	res=1ll*res*(n-siz[i])%mod*inv(1ll*n%mod)%mod;
        	res=4ll*res%mod*n%mod*n%mod*n%mod*n%mod;
        	res=1ll*res*inv(1ll*n*n%mod*(n-1)%mod*(n-1)%mod)%mod;
        	Ans=(Ans+res)%mod;
		}
		printf("%d\n",Ans);
    }
    return 0;
}
/*
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: 0
Runtime Error

input:

2
3
1 2
2 3
5
1 2
1 5
3 2
4 2

output:


result: