题目描述

众所周知,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
因为某些sb错误爆零了
一个合法的方案一定是一棵大小为a或b的子树一种颜色,其他的另一种颜色。
于是dfs找子树再拓扑两次就好了。
#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的更多相关文章

  1. 解Tom大叔出的Javascript题目

    原文参考,http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html Tom大叔的博客深入理解Javascript系列真是我们学习Java ...

  2. 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix

    Tom and matrix Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=5226 Mean: 题意很简单,略. analy ...

  3. GDC2016【全境封锁(Tom Clancy's The Division)】对为何对应Eye Tracked System,以及各种优点的演讲报告

    GDC2016[全境封锁(Tom Clancy's The Division)]对为何对应Eye Tracked System,以及各种优点的演讲报告 原文 4Gamer編集部:松本隆一 http:/ ...

  4. TOM大叔的几道Javascript题目与解答

    几道JS题目 之前没有深入研究js语言,最近几年前端越来越工程化,需要扎实的js基础,看到博客园上有很多大牛分享JS学习文章,幸运看到tom大叔的blog,抽时间潜心学习了其文章,遇到到其出的几道题目 ...

  5. 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 ...

  6. 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 ...

  7. hdu 5224 Tom and paper

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5224 Tom and paper Description There is a piece of pa ...

  8. 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 ...

  9. 华为上机:Tom的生日礼物

    Tom的生日礼物 描述: 四月一日快到了,Tom想了个愚人的好办法——送礼物.嘿嘿,不要想的太好,这礼物可没那么简单,Tom为了愚人,准备了一堆盒子,其中有一个盒子里面装了礼物.盒子里面可以再放零个或 ...

  10. ios的UIImage的两种不同的图片加载方式 tom猫

    在ios的UI交互设计时,对图片的处理是难免的:不同的处理方式会对内存有不同的影响: ********************************************************* ...

随机推荐

  1. vue- 指令v-if 与指令v-show的区别

    区别1: v-if :可以根据表达式的值在DOM中生成或移除一个元素. v-show:可以根据表达式的值来显示或者隐藏HTML元素.当v-show赋值为false时,元素被隐藏,此时查看代码时,该元素 ...

  2. phpcms php格式化 时间戳

    用PHPCMS V9 建站时,经常会用到时间标签,它是通用标签调用-日期时间格式化,适用全站. 一.日期时间格式化显示: a\标准型:{date('Y-m-d H:i:s', $rs['inputti ...

  3. (appium+python)UI自动化_10_adb常用命令

    前言 adb(Android Debug Bridge)工具是android-sdk里的一个工具,是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互.在app自动化测试过程中,有时要用到adb命 ...

  4. poj1742Coins(多重背包)

    People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar.One day Tony ...

  5. SEC3 - MySQL常见命令

    1.查看当前所有的数据库 show databases; 2. 打开指定的库名 use 库名称: 3.查看当前库中所有的表 show tables; 4. 查看其他库的所有表 show tables ...

  6. 通过queue实现前端的被动接收

    一般请求都是由前端主动发起请求,后端响应,但有些情况必须要后端达到一定条件了才向前端相应数据,这就变成前端被动了.比如微信接收信息,只有别人给你发消息,你才能被动接收消息. 最近做了个项目,当有人经过 ...

  7. 洛谷 P1892 [BOI2003]团伙(种类并查集)

    传送门 解题思路 用并查集f存朋友关系,一个数组e存的是敌人关系,是一个辅助数组,所以叫做种类并查集. 当p和q是朋友时,直接合并,但是当是敌人时,需要一些操作. 当p还没有敌人时(即p的敌人是自己) ...

  8. LOJ 2183 / SDOI2015 序列统计 (DP+矩阵快速幂)

    题面 传送门 分析 考虑容斥原理,用总的方案数-不含质数的方案数 设\(dp1[i][j]\)表示前i个数,和取模p为j的方案数, \(dp2[i][j]\)表示前i个数,和取模p为j的方案数,且所有 ...

  9. beeline链接hive报错

    看问题:beeline连接hiveserver2报错.连接串:hive  --service beeline -u jdbc:hive2://localhost:10000/hive 错误:Error ...

  10. XML处理指令

    “处理指令(PIs)允许文档包含用于应用程序的指令.指令并不是文档字符数据的一部分,但是必须通过应用程序传递”. 处理指令可以用于将信息传递给应用程序.处理指令可以出现在文档任意位置的标记外部.可以出 ...