「C - Ehab and Path-etic MEXs」
Posted lh2000
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「C - Ehab and Path-etic MEXs」相关的知识,希望对你有一定的参考价值。
题目链接
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++; } } }
以上是关于「C - Ehab and Path-etic MEXs」的主要内容,如果未能解决你的问题,请参考以下文章
CodeForces 1325C Ehab and Path-etic MEXs(思维)
Codeforces 1325C - Ehab and Path-etic MEXs
X - Ehab and Path-etic MEXs CodeForces - 1325C
codeforces 862C. Mahmoud and Ehab and the xor
Codeforces Round #435 (Div. 2) E. Mahmoud and Ehab and the function(预处理+二分)