Ehab and Path-etic MEXs图论思维题

Posted qq2210446939

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ehab and Path-etic MEXs图论思维题相关的知识,希望对你有一定的参考价值。

传送门:https://codeforces.ml/contest/1325/problem/C

题意:

  给你一个n个节点n-1条边的无向图,要求你要给每条边赋值,取值在0到n-2之间,要求给出一种构造方式,使每两对节点之间简单路径的边值组成的序列的mex值之和最小。

思路:

  对于一条链来说(所以节点的度<=2),无论怎么赋值,mex的长度都超过了n-2,但当出现一个节点的度>=3时,我们就可以把0,1,2分配给那个节点的三条边,这样任意两对的节点的mex永远不会超过2,因为无论怎么连都无法同时取到这三个数,总值也就最小了。

 

ac代码:顺带一提pair类型的max函数默认先比较第一个值,若相等再比较第二个值。

 

#include<iostream>
#include<vector>
using namespace std;
const int maxn=1e5+5;
typedef pair<int,int> paa;
vector<int> ve[maxn];
int n,v,u;
int ans[maxn];
int main()
{
    cin>>n;
    for(int i=1;i<=n-1;i++){
        cin>>u>>v;
        ve[u].push_back(i);
        ve[v].push_back(i);
        ans[i]=-1;
    }
    paa mx={0,0};
    for(int i=1;i<=n;i++)
        mx=max(mx,paa{(int)ve[i].size(),i});
    int cnt=0;
    for(auto x:ve[mx.second]){
        ans[x]=cnt++;
    }
    for(int i=1;i<n;i++){
        if(ans[i]==-1){
            ans[i]=cnt++;
        }
        cout<<ans[i]<<
;
    }
    return 0;
}

 

以上是关于Ehab and Path-etic MEXs图论思维题的主要内容,如果未能解决你的问题,请参考以下文章

「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

C. Ehab and Prefix MEXs

Codeforces Round #649 (Div. 2) C. Ehab and Prefix MEXs