MMP,差一点就做对了。
题目大意:给你一个树,对这个树的边进行编号,编号要求从0到n-1,不可重复,要求MEX(U,V)尽可能的小,
MEX(x,y)的定义:从x到y的简单路径上,没有出现的最小编号。
题解:
只要让0,1,2这三个号不在同一条路径上就行。
如果说是一条没有分支的树,那么无论怎么编号,MEX等于n-1。对于有分支的树,只要让他的叶子节点所连的边从小到大编号就行。。注意无向图求叶子节点的方法。。。。
度数那一步弄错了。。。
注意对小于2的树特判一下,就一条边,也就是0喽。
#include<bits/stdc++.h> using namespace std; const int N=1e5+7; int arr[N]; int inv[N]; int mark[N]; struct stu { int x,y; }pre[N]; int main(){ int n; cin>>n; for(int i=1;i<n;i++){ int x,y; cin>>x>>y; pre[i]={x,y}; inv[x]++; inv[y]++; } if(n==2) { cout<<0<<endl; return 0; } int pos=0; for(int i=1;i<=n;i++){ if(inv[i]==1) { mark[i]=pos++; } } for(int i=1;i<n;i++){ if(inv[pre[i].x]==1) cout<<mark[pre[i].x]<<endl; else if(inv[pre[i].y]==1) cout<<mark[pre[i].y]<<endl; else cout<<pos++<<endl; } return 0; }