社区讨论

样例没过

P15649[省选联考 2026] 找寻者 / recollector参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mmg4vky6
此快照首次捕获于
2026/03/07 17:41
15 小时前
此快照最后确认于
2026/03/07 20:03
13 小时前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MOD=998244353;
vector<int> g[5005];
int sz[5005],len[5005];
int ans;

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

void dfs1(int u,int fa){
    sz[u]=1;
    for(int v:g[u]){
        if(v==fa)continue;
        dfs1(v,u);
        sz[u]=(sz[u]+sz[v])%MOD;
    }
}

void dfs2(int u,int fa){
    vector<int> son;
    for(int v:g[u]){
        if(v==fa)continue;
        dfs2(v,u);
        son.push_back(v);
    }
    if(son.empty()){
        len[u]=1;
        return;
    }
    int S=0;
    for(int v:son)S=(S+len[v])%MOD;
    int inv_S=qpow(S,MOD-2);
    len[u]=1;
    for(int v:son){
        int p=1LL*len[v]*inv_S%MOD;
        len[u]=(len[u]+1LL*len[v]*p%MOD)%MOD;
        int light_p=(1-p+MOD)%MOD;
        ans=(ans+1LL*light_p*sz[v]%MOD)%MOD;
    }
}

void solve(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        g[i].clear();
        sz[i]=0;
        len[i]=0;
    }
    for(int i=1;i<n;i++){
        int u,v;
        cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    ans=0;
    dfs1(1,0);
    dfs2(1,0);
    cout<<ans%MOD<<"\n";
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr),cout.tie(nullptr);
    int c,t;
    cin>>c>>t;
    while(t--)solve();
    return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...