tom
题目描述
众所周知,Tom 猫对香肠非常感兴趣。有一天,Tom 家里的女主人赏给了Tom 一大堆香肠。这些香肠太多了,以至于Tom 一顿吃不完,于是它把这些香肠串成了一棵树,树的每个节点上都有一个香肠。
Tom 需要给这些香肠进行编号,其中有 aa 个香肠需要编号为 1,2,\cdots,a1,2,⋯,a 中的不重复的编号,作为早餐肠,剩下的 bb 个香肠需要编号为-1,-2,\cdots,-b−1,−2,⋯,−b中的不重复的编号,作为晚餐肠。
Tom 每天会随机吃一顿饭,可能是早饭,也可能是晚饭。如果是吃早饭,Tom 会吃掉编号绝对值最小的早餐肠,反之吃掉编号绝对值最小的晚餐肠。
如果一根香肠被吃掉了,那么与它相连的树上的边都会断掉,因此剩下的香肠可能会因此变成若干棵树,即变得不再连通。这是Tom 不希望发生的事。
请给这些香肠编号,使得无论Tom 如何安排早饭和晚饭,整棵树一直都是连通的。
输入格式
第一行三个正整数 n,a,bn,a,b,代表节点的数目,早餐肠的数目,晚餐肠的数目。保证 a + b = na+b=n
第二行开始,共 n-1n−1 行,每行两个正整数 u,vu,v,代表树上一条边。
输出格式
共 nn 行,第 ii 行输出第 ii 个节点的编号。
如果存在多种编号方式,请随意输出一种。如果不存在这样的编号方式,请输出 -1−1。
样例
样例输入1
6 3 3
1 2
2 3
2 4
4 5
4 6
样例输出1
1
3
2
-3
-2
-1
样例1 说明
编号后,无论如何安排早晚餐,香肠组成的树都是一直联通的。
另外,其它的编号方式也是可行的,比如2,3,1,-3,-1,-2 等。
样例2
下发了额外的一个大型样例文件。
数据范围与提示
测试点编号 | n的范围 | 特殊性质 |
---|---|---|
1-3 | n \le 10n≤10 | 无 |
4 | n \le 2000n≤2000 | 无 |
5,6,7 | n \le 10^5n≤105 | 树是一条以1, n 为端点的链 |
8 | n \le 10^5n≤105 | a=1a=1 |
9,10 | n \le 10^5n≤105 | 无 |
对于全部的数据,n \le 10^5, a + b = n,1 \le a, bn≤105,a+b=n,1≤a,b
来源
CSP-S 2019模拟 长沙一中2
Solution
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#define maxn 100005
using namespace std;
int n,a,b,head[maxn],tot,sz[maxn];
int F,pl,f[maxn],in[maxn],dfn[maxn],ed[maxn],dy[maxn],sc;
int col[maxn],flag[maxn];
queue<int>q;
struct node{
int v,nex;
}e[maxn*];
void add(int t1,int t2){
e[++tot].v=t2;e[tot].nex=head[t1];head[t1]=tot;
}
void dfs(int k,int fa){
sz[k]=;f[k]=fa;dfn[k]=++sc;dy[sc]=k;
for(int i=head[k];i;i=e[i].nex){
if(e[i].v==fa)continue;
dfs(e[i].v,k);
sz[k]+=sz[e[i].v];
}
ed[k]=sc;
if(sz[k]==a)F=,pl=k;
if(sz[k]==b)F=-,pl=k;
}
int main(){
cin>>n>>a>>b;
for(int i=,t1,t2;i<n;i++){
scanf("%d%d",&t1,&t2);
add(t1,t2);add(t2,t1);
in[t1]++;in[t2]++;
}
dfs(,);
if(!F){puts("-1");return ;}
for(int i=;i<=n;i++){
if(dfn[i]>=dfn[pl]&&dfn[i]<=ed[pl]){
flag[i]=;
if(in[i]==)q.push(i);
}
}
int now=;
while(!q.empty()){
int k=q.front();q.pop();col[k]=F*(++now);
for(int i=head[k];i;i=e[i].nex){
in[e[i].v]--;
if(in[e[i].v]==&&flag[e[i].v])q.push(e[i].v);
}
}
for(int i=;i<=n;i++)if(!flag[i]&&i!=f[pl]&&in[i]==)q.push(i);
in[f[pl]]=n;
now=;
while(!q.empty()){
int k=q.front();q.pop();col[k]=(-F)*(++now);
for(int i=head[k];i;i=e[i].nex){
in[e[i].v]--;
if(in[e[i].v]==&&!flag[e[i].v])q.push(e[i].v);
}
}
col[f[pl]]=(-F)*(++now);
for(int i=;i<=n;i++)printf("%d\n",col[i]);puts("");
return ;
}
tom的更多相关文章
- 解Tom大叔出的Javascript题目
原文参考,http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html Tom大叔的博客深入理解Javascript系列真是我们学习Java ...
- 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix
Tom and matrix Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5226 Mean: 题意很简单,略. analy ...
- GDC2016【全境封锁(Tom Clancy's The Division)】对为何对应Eye Tracked System,以及各种优点的演讲报告
GDC2016[全境封锁(Tom Clancy's The Division)]对为何对应Eye Tracked System,以及各种优点的演讲报告 原文 4Gamer編集部:松本隆一 http:/ ...
- TOM大叔的几道Javascript题目与解答
几道JS题目 之前没有深入研究js语言,最近几年前端越来越工程化,需要扎实的js基础,看到博客园上有很多大牛分享JS学习文章,幸运看到tom大叔的blog,抽时间潜心学习了其文章,遇到到其出的几道题目 ...
- hdu-----(1507)Uncle Tom's Inherited Land*(二分匹配)
Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- HDU 1507 Uncle Tom's Inherited Land*(二分图匹配)
Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- hdu 5224 Tom and paper
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5224 Tom and paper Description There is a piece of pa ...
- Hdu 1507 Uncle Tom's Inherited Land* 分类: Brush Mode 2014-07-30 09:28 112人阅读 评论(0) 收藏
Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- 华为上机:Tom的生日礼物
Tom的生日礼物 描述: 四月一日快到了,Tom想了个愚人的好办法——送礼物.嘿嘿,不要想的太好,这礼物可没那么简单,Tom为了愚人,准备了一堆盒子,其中有一个盒子里面装了礼物.盒子里面可以再放零个或 ...
- ios的UIImage的两种不同的图片加载方式 tom猫
在ios的UI交互设计时,对图片的处理是难免的:不同的处理方式会对内存有不同的影响: ********************************************************* ...
随机推荐
- mysqldump - 备份 MySQL 数据库
参考资料 备份 备份所有数据库中的所有数据(包括系统数据库) –all-databases 通过 --all-databases 选项备份所有的数据库: mysqldump -uroot -p --a ...
- curl 中关于 CURLINFO_HEADER_SIZE 的 BUG 定位及修复
curl 官方下载页面 CentOS7 默认安装的 curl 版本太低了,需要升级为最新版. 1. 问题描述 对接了一个接口,用来下载 PDF 文件.使用 curl 下载后,文件老是报错无法打开.接口 ...
- 下载 GitHub 上保存在 AWS 的文件
通过 GitHub 下载文件时,发现很多文件保存在亚马逊的 AWS 上.而国内访问 AWS 的速度很慢,经常会有文件下载失败.常用的解决方案是挂代理,但我这边挂了代理还是很慢,只好找其他办法. AWS ...
- vue手写轮播
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [Python3] 021 面向对象 第一弹
目录 1. 面向对象概述 1.1 OOP 思想 1.2 几个名词 1.3 类与对象 2. 类的基本实现 2.1 类的命名 2.2 如何声明一个类 2.3 如何实例化一个类 2.4 如何访问对象成员 2 ...
- BZOJ 1109 (LIS)
题面 传送门 分析 设dp[i]是第i个积木在自己的位置上时,前i个积木中最多能回到自己位置的数目. \(dp[i]=max(dp[j])+1 (i>j,a[i]>a[j],a[i]-a[ ...
- python常用的时间方法
from time import strftime setTime = strftime("%Y_%m_%d_%H_%M_%S", time.localtime()) // In ...
- 为什么需要在 React 类组件中为事件处理程序绑定this?
https://juejin.im/post/5afa6e2f6fb9a07aa2137f51 事件绑定作为回调函数参数传递给函数,丢失其上下文,执行的是默认绑定,不是隐式绑定 类声明和类表达式的主体 ...
- Springboot2.x整合SpringSecurity
一.Spring Security是什么?有什么作用(核心作用)?以及如何阅读本篇文章 1.是什么 Spring Security是Spring家族的一个强大的安全框架,与Springboot整合的比 ...
- pylint在pycharm的使用及pylint的配置
pylint作为python代码风格检查工具,接近 PEP8风格,在使用此方法的过程中,发现不仅能让代码更加规范,优雅,更能 发现 隐藏的bug. pylint在Pycharm中的2种安装方式: 第一 ...