zoukankan      html  css  js  c++  java
  • Codeforces Round #628 (Div. 2)C. Ehab and Path-etic MEXs(构造+树)

    题目链接:https://codeforces.com/contest/1325/problem/C

    题目意思:给定一棵树所有的边,对所有的边进行标号,询问任意两点Mex的最大值最小的的标号方案(输出任何一种)。

    Mex(u,v)表示从u到v的简单路径中没有出现的最小标号。

    题目思路:根据大佬的说法(大佬原话),只要有一个点的度数大于2,那么三个出边分别连0、1、2就可以了,身下的随便连,因为这样的话,任何一个Mex(u,v)值是一定一定是不大于2的,不可能有一个路径同时走0、1、2这三天边。本来思路大体是对的,太菜不会建图、吐了。不过建出来可能也要wa一阵子。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 vector<int> v[100005];
     4 int ans[100005];
     5 int main()
     6 {
     7     int n;
     8     scanf("%d",&n);
     9     for (int i=1;i<n;i++)
    10     {
    11         int a,b;
    12         scanf("%d%d",&a,&b);
    13         v[a].push_back(i);
    14         v[b].push_back(i);
    15         ans[i]=-1;
    16     }
    17     pair<int,int> mx(0,0);
    18     for (int i=1;i<=n;i++)
    19     mx=max(mx,make_pair((int)v[i].size(),i));
    20     int cur=0;
    21     for (int i:v[mx.second])
    22     ans[i]=cur++;
    23     for (int i=1;i<n;i++)
    24     {
    25         if (ans[i]==-1)
    26         ans[i]=cur++;
    27         printf("%d
    ",ans[i]);
    28     }
    29 }
  • 相关阅读:
    UVA247 电话圈 Calling Circles
    Python开发之路
    Day 8-模块
    Homework
    Day 7- 装饰器
    Day 6-文件操作的其他方法 迭代器 生成器
    数据-进制
    Day 5-变量与高阶函数
    Day 4-集合、百分号拼接及函数
    Day 3-Python列表、元祖、词典
  • 原文地址:https://www.cnblogs.com/Mingusu/p/12496231.html
Copyright © 2011-2022 走看看