vj-E题Ehab and Path-etic MEXs
2024-09-14 11:39:57
题意:给定一棵树所有的边,对所有的边进行标号,询问任意两点Mex的最大值最小的的标号方案(输出任何一种)。
Mex(u,v)表示从u到v的简单路径中没有出现的最小标号。
思路:(借鉴大佬的)
如果树是一条链,那么任何标号方案对首尾两端的 都不会影响,直接输出 到 即可;
其余情况可以证明 最大值的最小值一定为 :
(1)无论如何安排,标 边和标 边一定存在公共路径联通;
(2)对于非链的树一定存在 , 的安排方式使得存在边不在, 的任何公共路径上。在该边上标 即可满足不存在,,的公共路径。
有两种比较简洁的实现方式:
(1)找到三个度为 的点,选取这三个点的临边,标为,,,其余任意;
(2)找到一个度大于等于 的点,选取它的三个临边。
#include<bits/stdc++.h>
const int maxn= 1e5+100;
using namespace std;
int a[maxn],b[maxn],num[maxn];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<n;i++)
{
scanf("%d%d",&a[i],&b[i]);
num[a[i]]++;num[b[i]]++;
}
int op = 0;
for(int i=1;i<=n;i++) if(num[i]>=3) {op = i; break;}
if(!op) for(int i=0;i<n-1;i++) printf("%d\n",i);
else
{
for(int i=1,cnt1=0,cnt2=3;i<n;i++)
{
if((a[i]==op || b[i]==op) && cnt1<=2) printf("%d\n",cnt1++);
else printf("%d\n",cnt2++);
}
}
return 0;
}
最新文章
- TinyPNG---一个压缩PNG的神站
- python 清楚数组重复字符串元素
- [转载] 使用异步 I/O 大大提高应用程序的性能
- PO_PO系列 - 收货管理分析(案例)
- eclipse开发android程序常见问题解决办法
- java-String中的 intern()<;转>;
- 使用Echarts的五个步骤
- PS:抠图方法1(利用对比度ctrl+l)
- JAVA课程设计---学生基本信息管理系统(201521123039 王兴)
- 【bzoj1103】【POI2007】【大都市】(树状数组+差分)
- [bzoj1316] 树上的询问
- bash语法
- 前端工程师必须要知道的HTTP部分
- navicat primium 快捷键与命令
- 如何用java POI将word中的内容导入到mysql数据库中
- CMD下进入MYSQL的命令
- nginx 中配置多个location并解决js/css/jpg/等的加载问题
- golang fatal error: concurrent map read and map write
- 开源且功能强大的C# 扩展方法类库Pure.Ext,包含1000+个拓展方法 (支持.Net Framework和.Net Core)
- 16bit C &; ASM 如何混合编译?