1 条题解

  • 0
    @ 2023-11-1 18:27:30
    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5 + 5;
    vector<int> g[maxn]; 
    int n, sz[maxn], ms[maxn], ans = 1e9;
    
    void dfs(int u, int p) {	// u: 当前节点;p: 父节点 
    	sz[u] = 1;
    	for (auto v : g[u])
    		if (v != p)
    			dfs(v, u), sz[u] += sz[v], ms[u] = max(ms[u], sz[v]);
    	ms[u] = max(ms[u], n - sz[u]);
    	ans = min(ans, ms[u]);
    }
    
    int main() {
    	scanf("%d", &n);
    	for (int i = 1; i < n; i++) {
    		int u, v;
    		scanf("%d%d", &u, &v);
    		g[u].push_back(v);
    		g[v].push_back(u);
    	}
    	dfs(1, -1);
    	for (int i = 1; i <= n; i++)
    		if (ms[i] == ans)
    			printf("%d ", i);
    	return 0;
    }
    
    • 1

    信息

    ID
    13
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    13
    已通过
    4
    上传者