zoukankan      html  css  js  c++  java
  • X

    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;
    }
  • 相关阅读:
    Python学习笔记 第四天
    Python学习笔记 第三天
    linux系统优化(CentOS7)
    ARMS踩坑合集
    zabbix报错合集(附解决方法)
    keepalived
    ansible
    nginx
    安装虚拟机
    linux发展、redhat与centos的区别
  • 原文地址:https://www.cnblogs.com/Accepting/p/12511598.html
Copyright © 2011-2022 走看看