标签:names amp ble color for col 其他 cin pac
http://codeforces.com/contest/1325/problem/C
给一颗树,有 n nn 个顶点,给这个树的边分别编号为 0 (n−2) 0~(n-2)0 (n−2),问怎样编使得对于树上任意两点 u,v u,vu,v 的最大 mex(u,v) mex(u,v)mex(u,v) 值最小。mex(u,v) mex(u,v)mex(u,v) 表示由 u uu 到 v vv 点的简单路径的长度构成的集合中,没有出现的最小非负整数。
其实就是找到一个点,这个点与至少三个边相连,然后分别把这三个边定义为0,1,2;即可此时无论怎么连,都无法同时包括这三个数,也就是说必定最终要取其中一个。其他边随便赋值即可。
#include<bits/stdc++.h> using namespace std; struct tree{ int u,v,va; }s[100005]; int du[100005];int check=0; int main(){ int n; cin>>n; for(int i=0;i<n-1;i++){ cin>>s[i].u>>s[i].v; du[s[i].u]++; du[s[i].v]++; if(du[s[i].u]>=3) check=s[i].u; if(du[s[i].v]>=3) check=s[i].v; } int res=3,tem=0; if(check==0)res=0; for(int i=0;i<n-1;i++){ if((s[i].u==check||s[i].v==check)&&tem<=2){ cout<<tem<<endl;tem++; } else{ cout<<res<<endl;res++; } } }
标签:names amp ble color for col 其他 cin pac
原文地址:https://www.cnblogs.com/LH2000/p/12501146.html