60分wa3个求调
查看原帖
60分wa3个求调
784606
wuwendi123楼主2025/6/30 22:40

60分求调

// //暴力40pts

// #include <bits/stdc++.h>

// using namespace std;
// #define int long long
// const int N = 1e5+5,mod = 1e9;
// int n,d[N],f[N],sum,ans;
// vector<int> g[N];
// void init(){//预处理阶乘
//     f[0] = 1;
//     for(int i=1;i<N;i++){
//         f[i] = f[i-1]*i % mod;
//     }
// }
// void dfs(int x,int fa){
//     if(fa == -1) ans = ans * f[d[x]] % mod; //起点不减1
//     else ans = ans * f[d[x] - 1] % mod;    // 其余少一条父节点,-1
//     for(auto v:g[x]){
//         if(v != fa){
//             dfs(v,x);
//         }
//     }
// }
// signed main()
// {
//     init();
//     cin>>n;
//     for(int i=1,u,v;i<n;i++){
//         cin>>u>>v;
//         g[u].push_back(v);
//         g[v].push_back(u);
//         d[u]++,d[v]++;
//     }
//     for(int i=1;i<=n;i++){
//         ans = 1;
//         dfs(i,-1);
//         sum = (sum + ans) % mod;
//     }
//     cout<<sum;
// 	return 0;
// }


#include <bits/stdc++.h>

using namespace std;
#define int long long
const int N = 1e5+5,mod = 1e9;
int n,d[N],f[N],sum,ans;
vector<int> g[N];
void init(){//预处理阶乘
    f[0] = 1;
    for(int i=1;i<N;i++){
        f[i] = f[i-1]*i % mod;
    }
}
void dfs(int x,int fa){
    if(fa == -1) ans = ans * f[d[x]] % mod; //起点不减1
    else ans = ans * f[d[x] - 1] % mod;    // 其余少一条父节点,-1
    for(auto v:g[x]){
        if(v != fa){
            dfs(v,x);
        }
    }
}
signed main()
{
    init();
    cin>>n;
    for(int i=1,u,v;i<n;i++){
        cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
        d[u]++,d[v]++;
    }
    ans = 1ll;
    for(int i=1;i<=n;i++){  //先都去掉一个节点计算
        ans = ans * f[d[i]-1] % mod;
    }
    for(int i=1;i<=n;i++){  //再乘回当前节点的度
        sum = (sum + ans*d[i]%mod) % mod;
    }
    cout<<sum;
	return 0;
}
2025/6/30 22:40
加载中...