「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」的主要内容,如果未能解决你的问题,请参考以下文章

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(预处理+二分)