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