1 条题解

  • 0
    @ 2025-9-10 8:56:46

    C++ :

    #include<cstdio>
    #include<cstring>
    
    using namespace std;
    
    const int MAXN=1000010;
    typedef long long LL;
    
    int n,tot,ans;
    int h[MAXN];
    int fa[MAXN];
    LL size[MAXN],f[MAXN];
    
    struct Edge{
    	int u,v,next;
    }e[MAXN<<1];
    
    void add(int u,int v) {
    	e[++tot].u=u;
    	e[tot].v=v;
    	e[tot].next=h[u];
    	h[u]=tot;
    }
    
    void dfs(int x) {
    	size[x]=1;
    	for(int i=h[x];i;i=e[i].next) {
    		int v=e[i].v;
    		if(v==fa[x]) continue;
    		fa[v]=x;
    		dfs(v);
    		size[x]+=size[v];
    		f[x]+=f[v]+size[v];
    	}
    }
    
    void dp(int x) {
    	if(x!=1)
    		f[x]=f[fa[x]]+n-2*size[x];
    	for(int i=h[x];i;i=e[i].next) {
    		if(e[i].v==fa[x]) continue;
    		dp(e[i].v);
    	}
    }
    
    int main(){
    	int i,u,v;
    	scanf("%d",&n);
    	for(i=1;i<n;++i) {
    		scanf("%d%d",&u,&v);
    		add(u,v);add(v,u);
    	}
    	dfs(1);dp(1);
    	for(i=1;i<=n;i++)
    	   if(f[i]>f[ans])
    		   ans=i;
    	printf("%d",ans);
    }
    
    
    • 1

    信息

    ID
    3349
    时间
    2000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者