题意:
给一颗树,有
个顶点,给这个树的边分别编号为
,问怎样编使得对于树上任意两点
的最大
值最小。
表示由
到
点的简单路径的长度构成的集合中,没有出现的最小非负整数。
很简单的一个贪心策略,我们只要找到一个度数大于2的节点,和他相连的边放置
这样即可。
AC代码:
const int N = 2e5 + 10;
vector<pair<int, int>> v[N];
int ans[N];
int n, cnt;
int x, y;
int main()
{
sd(n);
rep(i, 1, n - 1)
{
sdd(x, y);
v[x].pb(make_pair(y, i));
v[y].pb(make_pair(x, i));
}
cnt = 1;
rep(i, 1, n)
{
if (v[i].size() > 2)
{
for (auto j : v[i])
ans[j.se] = cnt++;
break;
}
}
rep(i, 1, n - 1)
{
if (ans[i] == 0)
ans[i] = cnt++;
pd(ans[i] - 1);
}
return 0;
}