P3478 换根DP 蒟蒻无语WA25求调
查看原帖
P3478 换根DP 蒟蒻无语WA25求调
765058
zmh18257920327楼主2025/8/2 11:10

有亿点尴尬

别的OJ50PTS别的OJ:50PTS

洛谷:25PTS洛谷:25PTS

#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#define int long long
using namespace std;
const int N=1e5+5;
vector<int>g[N];
int dp[N];
int dep[N];
int Size[N];
int n;
void dfs(int u, int fa){
    Size[u]=1;
    dep[u]=dep[fa]+1;
    for(int v:g[u]){
        if(v==fa)continue;
        dfs(v,u);
        Size[u]+=Size[v];
    }
}
void dfs2(int u, int fa){
    for(int v:g[u]){
        if(v==fa)continue;
        dp[u]=dp[v]-Size[v]+(Size[1]-Size[v]);
        dfs2(v,u);
    }
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    for(int i=0;i<n-1;i++){
        int x,y;
        cin>>x>>y;
        g[x].push_back(y);
        g[y].push_back(x);
    }
    dfs(1,-1);
    for(int i=1;i<=n;i++)dp[1]+=dep[i];
    dfs2(1,-1);
    int ans=0x3f3f3f3f;
    int x;
    for(int i=1;i<=n;i++){
        if(dp[i]<ans){
            ans=dp[i];
            x=i;
        }
    }
    cout<<x<<endl;
    return 0;
}
2025/8/2 11:10
加载中...