传送门

题意:

给你一颗nnn个点的树,初始的时候某些点有权值pip_ipi​,现在你需要给没给定的点赋一个权值,使得任意相邻点权值之差的绝对值等于111,若无解输出NoNoNo。

1≤n≤1e5,1≤k≤n,0≤pj≤1e51\le n\le 1e5,1\le k\le n,0\le p_j\le 1e51≤n≤1e5,1≤k≤n,0≤pj​≤1e5

思路:

考虑以定一个根,先递归儿子,求出儿子能取到的权值范围,让后根据儿子的范围来确定当前点的范围,不合法的话就直接输出NoNoNo即可。

如果合法的话,显然从我们之前选定的根开始随意的取一个区间内的合法值一定可以构造出答案。

#include<bits/stdc++.h>
#define X first
#define Y second
#define Mid (tr[u].l+tr[u].r>>1)
#define pb push_back
using namespace std;const int N=1000010,INF=0x3f3f3f3f,mod=1e9+7;
typedef long long LL;int n,m;
vector<int>v[N];
int a[N],col[N];
int l[N],r[N];void dfs_col(int u,int fa,int c) {col[u]=c;for(auto x:v[u]) {if(x==fa) continue;dfs_col(x,u,!c);}
}void dfs(int u,int fa) {for(auto x:v[u]) {if(x==fa) continue;dfs(x,u);l[u]=max(l[u],l[x]-1);r[u]=min(r[u],r[x]+1);}if(l[u]>r[u]) {puts("No");exit(0);}
}void dfs_ans(int u,int fa,int val) {a[u]=val;for(auto x:v[u]) {if(x==fa) continue;if(val-1>=l[x]&&val-1<=r[x]) dfs_ans(x,u,val-1);else dfs_ans(x,u,val+1);}
}void solve() {scanf("%d",&n);for(int i=1;i<=n-1;i++) {int a,b; scanf("%d%d",&a,&b);v[a].push_back(b);v[b].push_back(a);}for(int i=1;i<=n;i++) l[i]=-INF,r[i]=INF;memset(a,-1,sizeof(a));scanf("%d",&m);for(int i=1;i<=m;i++) {int aa,b; scanf("%d%d",&aa,&b);a[aa]=b;l[aa]=b; r[aa]=b;}for(int i=1;i<=n;i++) if(a[i]>=0) {dfs_col(i,0,a[i]%2);break;}for(int i=1;i<=n;i++) if(a[i]>=0&&(a[i]%2!=col[i])) {puts("No");return;}dfs(1,0);dfs_ans(1,0,l[1]);puts("Yes");for(int i=1;i<=n;i++) printf("%d\n",a[i]);puts("");
}int main() {int _=1;while(_--) {solve();}return 0;
}

AtCoder Regular Contest 063 E - Integers on a Tree 构造 + 二分图染色相关推荐

  1. AtCoder题解——AtCoder Regular Contest 107——B - Quadruple

    题目相关 题目链接 AtCoder Regular Contest 107 B 题,https://atcoder.jp/contests/arc107/tasks/arc107_b. Problem ...

  2. AtCoder Regular Contest 065

    AtCoder Regular Contest 065 C - Daydream Score : 300300300 points 倒着来就行了,正着来会产生歧义匹配,dreamer,dreamdre ...

  3. AtCoder Regular Contest 100 D - Equal Cut 思维 + 前缀和

    传送门 文章目录 题意: 思路: 题意: 给你一个数组aaa,你要将其分成四份,让这四份中和的最大值−-−最小值最小,输出这个最小值. n≤2e5,ai≤1e9n\le2e5,a_i\le1e9n≤2 ...

  4. AtCoder Regular Contest 100 E - Or Plus Max Sos dp

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为2n2^n2n的数组,让你对于所有的1≤k≤2n−11\le k\le 2^n-11≤k≤2n−1求最大的ai+aj,0≤i<j≤2n−1 ...

  5. AtCoder Regular Contest 061 E - Snuke‘s Subway Trip(建图 + dijkstra最短路 / 0/1bfs / 并查集)

    AtCoder Regular Contest 061 E - Snuke's Subway Trip problem 洛谷翻译 my idea 最近一直在做网络流,所以一读这题后,我就想到了最小费用 ...

  6. NOMURA Programming Contest 2021(AtCoder Regular Contest 121)

    文章目录 A - 2nd Greatest Distance B - RGB Matching C - Odd Even Sort D - 1 or 2 E - Directed Tree F - L ...

  7. AtCoder Regular Contest 071 D - 井井井 / ###

    题目:http://arc071.contest.atcoder.jp/tasks/arc071_b 题意: 有一个二维的平面,给你xn根竖线和ym根横线,问这些线围成的长方形(正方形)的面积和(要求 ...

  8. AtCoder Regular Contest 062 E - AtCoDeerくんと立方体づくり / Building Cubes with AtCoDeer

    题目传送门:https://arc062.contest.atcoder.jp/tasks/arc062_c 题目大意: 给你\(N\)块正方形木板,每块木板四角有四种颜色(可以相同),木板中央有编号 ...

  9. AtCoder Regular Contest 092 Two Sequences AtCoder - 3943 (二进制+二分)

    Problem Statement You are given two integer sequences, each of length N: a1,-,aN and b1,-,bN. There ...

最新文章

  1. Android app 启动页尺寸大小 忘记了怎么办
  2. 网络编程(socket)套接字之基于udp的套接字
  3. 设置Grid某列的Title样式和列内数据样式
  4. C++ 对TXT 的串并行读写
  5. html5 canvas获取坐标,HTML5 canvas坐标
  6. 05Vue.js快速入门-Vue实例详解与生命周期
  7. 安卓程序运行后控件不显示_智能镜子显示屏掀起了智能家居行业的新潮流
  8. 【网络】几种常见的协议
  9. Ubuntu18.04安装ROS Melodic(解决网络原因,先将所需压缩包下载到本地,然后rosdep update)
  10. (一)GPS与基站定位
  11. HDU 2549 壮志难酬
  12. linux yum安装驱动,centos8安装alsa驱动
  13. Flowable 快速入门教程:通过 Comment 保存审核信息
  14. 【蜂口 | AI人工智能】人脸美颜——龙鹏 深度学习与人脸图像应用连载(八)
  15. css3 云朵飘动效果动画
  16. 三步走,教你高效管理好团队
  17. linux 查看mysql
  18. PS鼠绘教程:PS鼠绘炫酷红色保时捷跑车
  19. 李振杰:中科红旗的生与死
  20. 自己动手开发翻译软件(Java版)

热门文章

  1. wireshark-win64-3.4.0安装_这9类轴承的安装方法,你可都知道?有哪些需要注意的呢?...
  2. 波的折射现象,你都了解吗?
  3. 世界上最美的40个小镇,你见过多少个?
  4. 微信新功能又来了,这些功能再次打开了我新世界的大门!
  5. 原来历史人物的英文名竟然叫这些,太好笑了吧哈哈哈哈哈
  6. 数学建模,还得这样学!
  7. html仿苹果浏览器,完美仿iPhone风格主题 领航浏览器体验
  8. php生成vcf,详解PHP如何实现生成vcf vcard文件
  9. office 高效办公智慧树_干货高效实用的office办公小技巧之word篇
  10. Java千万数据导入mysql_java之5分钟插入千万条数据