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交互设计时,对图片的处理是难免的:不同的处理方式会对内存有不同的影响: ********************************************************* ...
随机推荐
- 2019Hdu多校第三场:1007 Find the answer(multiset 解法)
原题链接: Find the answer c++中,multiset是库中一个非常有用的类型,它可以看成一个序列,插入一个数,删除一个数都能够在O(logn)的时间内完成,而且他能时刻保证序列中的数 ...
- Codeforces Round #285 (Div. 2)C. Misha and Forest(拓扑排序)
传送门 Description Let's define a forest as a non-directed acyclic graph (also without loops and parall ...
- Mac002--Git安装
Mac--Git安装 注意:在安装Git前,可先安装homebrew,应用brew命令安装Git即可. 一.Mac 安装homebrew 参考博客:https://blog.csdn.net/yuex ...
- nodejs启动
npm install cnpm install npm run dev cnpm install 与 npm install : https://blog.csdn.net/meng_suiga/ ...
- Linux-第二篇常用命令
1.常用目录文件操作命令 cd:切换目录 格式:cd 目录 ls:显示文件和目录列表.可选参数: -l 列出文件的详细信息 -a 列出当前目录所有文件,包含隐藏文件 ll:查看目录接口,相当于是ls ...
- 2019Flutter面试题最新整理大全(含答案)
一.前言2019年行将结束,也该规划一下自己的职业生涯了:是选择继续从事Android(Android的话已经火了几年了,现在算是进入寒冬了,需要考虑清楚)?还是学习新的跨平台开发Flutter技术? ...
- Linux就该这么学09学习笔记
参考链接:https://www.linuxprobe.com/chapter-09.html 配置网卡服务 配置网卡参数 1.执行nmtui命令运行网络配置工具 2.选中Edit a connect ...
- spring-boot-shiro-jwt-redis实现登陆授权功能
一.前言 在微服务中我们一般采用的是无状态登录,而传统的session方式,在前后端分离的微服务架构下,如继续使用则必将要解决跨域sessionId问题.集群session共享问题等等.这显然是费力不 ...
- Sass:RGB颜色函数-Mix()函数
Mix 函数是将两种颜色根据一定的比例混合在一起,生成另一种颜色.其使用语法如下: mix($color-1,$color-2,$weight); $color-1 和 $color-2 指的是你需要 ...
- Sass函数:数字函数-ceil()函数
ceil() 函数将一个数转换成最接近于自己的整数,会将一个大于自身的任何小数转换成大于本身 1 的整数.也就是只做入,不做舍的计算: >> ceil(2.0) 2 >> ce ...