/*
十分巧妙的二分
题意选最少的点涂色
使得满足输入信息:
1 x的子树涂色数不少于y
2 x的子树外面涂色数不少于y
我们若是把2转化到子树内最多涂色多少
就可以维护这个最小和最大
如果我们二分出了答案 就可以完成转化
转化后也恰好可以判断二分是否合法
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#define maxn 100010
using namespace std;
int T,n,m,num,ans,head[maxn],L[maxn],R[maxn],a[maxn],b[maxn],s[maxn];
struct node{
int v,pre;
}e[maxn*];
void Add(int from,int to){
num++;e[num].v=to;
e[num].pre=head[from];
head[from]=num;
}
bool Dfs(int now,int from){
int l=,r=;
for(int i=head[now];i;i=e[i].pre){
int v=e[i].v;
if(v==from)continue;
if(Dfs(v,now)==)return ;
l+=L[v];r+=R[v];
}
L[now]=max(L[now],l);
R[now]=min(R[now],r);
return L[now]<=R[now];
}
bool Judge(int C){
for(int i=;i<=n;i++){
L[i]=;R[i]=n;
}
for(int i=;i<=n;i++){
L[i]=a[i];R[i]=min(C-b[i],s[i]);
if(L[i]>s[i])return ;
if(b[i]>n-s[i])return ;
}
return Dfs(,)&&L[]<=C&&R[]>=C;
}
void dfs(int now,int from){
s[now]=;
for(int i=head[now];i;i=e[i].pre){
int v=e[i].v;
if(v==from)continue;
dfs(v,now);s[now]+=s[v];
}
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);int u,v;
num=;ans=-;
memset(head,,sizeof(head));
memset(a,,sizeof(a));
memset(b,,sizeof(b));
for(int i=;i<n;i++){
scanf("%d%d",&u,&v);
Add(u,v);Add(v,u);
}
dfs(,);
scanf("%d",&m);
while(m--){
scanf("%d%d",&u,&v);a[u]=max(a[u],v);
}
scanf("%d",&m);
while(m--){
scanf("%d%d",&u,&v);b[u]=max(b[u],v);
}
int l=,r=n;
while(l<=r){
int mid=(l+r)/;
if(Judge(mid)){
ans=mid;r=mid-;
}
else l=mid+;
}
printf("%d\n",ans);
}
return ;
}

Color a Tree

HDU - 6241

Color a Tree HDU - 6241的更多相关文章

  1. CCPC 2017 哈尔滨 L. Color a Tree && HDU 6241(二分+树形DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6241 题意:给你一棵有 n 个结点的树,每个结点初始颜色都为白色,有 A 个条件:结点 x_i 的黑色 ...

  2. POJ 2054 Color a Tree

    贪心....                    Color a Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions:  ...

  3. Color a Tree[HDU1055]

    Color a Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  4. H - Partial Tree HDU - 5534 (背包)

    题目链接: H - Partial Tree  HDU - 5534 题目大意:首先是T组测试样例,然后n个点,然后给你度数分别为(1~n-1)对应的不同的权值,然后问你在这些点形成树的前提下的所能形 ...

  5. Binary Tree HDU - 5573 (思维)

    题目链接: B - Binary Tree  HDU - 5573 题目大意: 给定一颗二叉树,根结点权值为1,左孩子权值是父节点的两倍,右孩子是两倍+1: 给定 n 和 k,让你找一条从根结点走到第 ...

  6. Minimal Ratio Tree HDU - 2489

    Minimal Ratio Tree HDU - 2489 暴力枚举点,然后跑最小生成树得到这些点时的最小边权之和. 由于枚举的时候本来就是按照字典序的,不需要额外判. 错误原因:要求输出的结尾不能有 ...

  7. POJ 2054 Color a Tree解题报告

    题干 Bob is very interested in the data structure of a tree. A tree is a directed graph in which a spe ...

  8. S - Query on a tree HDU - 3804 线段树+dfs序

    S - Query on a tree HDU - 3804   离散化+权值线段树 题目大意:给你一棵树,让你求这棵树上询问的点到根节点直接最大小于等于val的长度. 这个题目和之前写的那个给你一棵 ...

  9. Color a Tree & 排列

    Color a Tree 题目链接 好不可做?可以尝试一下DP贪心网络流.DP 似乎没法做,网络流也不太行,所以试一下贪心. 考虑全局中最大权值的那个点,如果它没父亲,那么一定会先选它:否则,选完它父 ...

随机推荐

  1. 实现strcpy

    #include <stddef.h> char* strcpy(char* dest, const char* src) { if (dest == NULL || src == NUL ...

  2. zblog实现后台导航栏增加链接功能的最简单方法

    首先在ftp中找到这个目录   zb_system/admin/ 然后找到    admin_top.php      这个文件 再然后找到这行代码      <?php ResponseAdm ...

  3. Android 控制硬加速 hardwareAccelerated

    从Android3.0 (API level11)开始,Android的2D显示管道被被设计得更加支持硬加速了.硬加速使用GPU承担了所有在View的canvas上执行的绘制操作. 启用硬加速最简单的 ...

  4. JS——全选与全不选

    1.每个子input标签都需要进行判断 2.使用开闭原则,一旦满足条件就改变默认值 3.在给主input标签注册事件时,要求主input标签的checked值赋值给子标签 <!DOCTYPE h ...

  5. 【技术累积】【点】【java】【28】Map遍历

    Map遍历 map的遍历一般有几种吧 遍历entrySet for(Map.Entry<String,String> entry : map.entrySet()){ } Iterator ...

  6. python mongodb压力测试脚本

    $ pip install pymongo #!/usr/bin/env python #coding=utf-8 #Author: Ca0Gu0 from pymongo import MongoC ...

  7. 码书:编码与解码的战争 PDF 下载

    码书:编码与解码的战争 PDF 下载 下载地址:https://pan.baidu.com/s/14Y_krHh-unOv4g2KYFFDgQ 如需分享码:[打开微信]->[扫描右侧二维码]-& ...

  8. DOM节点的获取

      document.getElementById();//id名,在实际开发中较少使用,选择器中多用class  id一般只用在顶级层存在 不能太过依赖id document.getElements ...

  9. CentOS安装Docker-ce并配置国内镜像

    前提条件 1.系统.内核 CentOS7 要求64位系统.内核版本3.10以上 CentOS6 要求版本在6.5以上,系统64位.内核版本2.6.32-431以上 查看内核版本号 uname -r # ...

  10. UID中RUID、EUID和SUID的区别

    看UNIX相关的书时经常能遇到这几个概念,但一直没有好好去理清这几个概念,以致对这几个概念一直一知半解.今天好好区分了一下这几个概念并总结如下.说白了这几个UID引出都是为了系统的权限管理. 下面分别 ...