题目链接
思路:看图是否的单链状,如果是单链状,存在max mex为n-1,否则max mex为2;mex(u,v):表示从u到v这条路径上边权未出现过的数的最小的一个。
即找出一个度不小于3的点,使它其中三边权值分别为0,1,2,其他随便。
如果不存在度大于等于3的点,可以随便赋值。
代码:
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
typedef long long ll;
int c[100005];
struct D{
int u,v;
}p[100005];
int main(){
int n;
cin>>n;
for(int i=1;i<n;i++){
cin>>p[i].u>>p[i].v;
c[p[i].u]++,c[p[i].v]++;
}
int aim=-1;
for(int i=1;i<n;i++){
if(c[i]>=3){
aim=i;
break;
}
}
for(int i=1,j=3,k=0;i<n;i++){
if(aim!=-1){
if((p[i].u==aim||p[i].v==aim)&&k<3){
cout<<k++<<endl;
}else cout<<j++<<endl;
}else cout<<k++<<endl;
}
return 0;
}