#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define LL long long
using namespace std;
const int MAXN = 20000 + 10;
int dp[MAXN], val[MAXN];
vector<int>G[MAXN];
int n;
int dfs(int u, int pre)
{
dp[u] = 0, val[u] = 1;
int sz = G[u].size();
for(int i=0;i<sz;i++)
{
int v = G[u][i];
if(v == pre) continue;
dfs(v, u);
dp[u] = max(dp[u], val[v]);
val[u] += val[v];
}
dp[u] = max(dp[u], n - val[u]);
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int u, v;
scanf("%d", &n);
for(int i=0;i<=n;i++) G[i].clear();
memset(dp, 0, sizeof(dp));
memset(val, 0, sizeof(val));
for(int i=1;i<n;i++)
{
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
dfs(1,-1);
int id = 1, ans = dp[1];
for(int i=2;i<=n;i++)
{
if(ans > dp[i])
{
ans = dp[i];
id = i;
}
}
printf("%d %d\n", id, ans);
}
return 0;
}
POJ 1655 Balancing Act(树型DP)
最新推荐文章于 2018-08-06 19:11:45 发布