题意:
解法:
对于一个点,他的所有边颜色都必须不同,
那么显然最小颜色数就是所有点中的最大度数.
设x为度数最大的点,那么以x为树根开始dfs,对递归对边涂色即可.
code:
#include<bits/stdc++.h>
#define int long long
#define PI pair<int,int>
using namespace std;
const int maxm=1e5+5;
vector<PI>g[maxm];
int used[maxm];
int d[maxm];
int c[maxm];
int n;
void dfs(int x,int pre_id){
int col=1;
for(auto i:g[x]){
int v=i.first,now_id=i.second;
if(now_id==pre_id)continue;
if(col==c[pre_id])col++;
c[now_id]=col++;
dfs(v,now_id);
}
}
void solve(){
cin>>n;
for(int i=1;i<n;i++){
int a,b;cin>>a>>b;
g[a].push_back({b,i});
g[b].push_back({a,i});
d[a]++;d[b]++;
}
int ma=1;
for(int i=1;i<=n;i++){
if(d[ma]<d[i]){
ma=i;
}
}
dfs(ma,0);
cout<<d[ma]<<endl;
for(int i=1;i<n;i++){
cout<<c[i]<<endl;
}
}
signed main(){
ios::sync_with_stdio(0);
solve();
return 0;
}