/*
十分巧妙的二分
题意选最少的点涂色
使得满足输入信息:
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. java_基础知识_字符串练习题_计算两个字符串的最长公共字串长度

    package tek; Java算法——求出两个字符串的最长公共字符串 /** * @Title: 问题:有两个字符串str1和str2,求出两个字符串中最长公共字符串. * @author 匹夫( ...

  2. DeltaFish 小组成员及个人博客地址

    艾寅中  http://www.cnblogs.com/aiyz 陈志锴  http://www.cnblogs.com/chenzhikai 李   鑫  http://www.cnblogs.co ...

  3. mac中显示隐藏文件和.开头的文件

    在控制台中执行一下命令,即可在finder中看到此类文件: defaults write com.apple.Finder AppleShowAllFiles YES killall Finder

  4. Ajax——异步基础知识(一)

    基础概念 1.异步请求可以做到偷偷向服务器发送请求,而页面却不刷新 2.get异步请求传递参数是通过url追加键值对的方式 3.post异步请求比较特殊,需要设置请求的类型 User-Agent:浏览 ...

  5. jQuery——链式编程与隐式迭代

    链式编程 1.原理:return this; 2.通常情况下,只有设置操作才能把链式编程延续下去.因为获取操作的时候,会返回获取到的相应的值,无法返回 this. 3.end():结束当前链最近的一次 ...

  6. Android studio在使用过程中的问题总汇!

    使用android studio也有一段时间了,汇总了一下这段时间内遇到一些常见问题,希望能够帮助到大家! 一.字体大小问题 在android studio的使用过程中没有发现类似于Eclipse中的 ...

  7. Linux 配置JDK + MyEclipse

    版本:Ubuntu16.04: jdK: Java SE Development Kit 8u102; My Eclipse: 10.6; JDK配置的细致步骤参见此处. 就一点要注意: 请使用代码进 ...

  8. 扩增子图表解读8网络图:节点OTU或类Venn比较

    网络图 Network 网络图虽然给人高大上的感觉,但是由于信息太多,无法给读者提供读有效的可读信息或是读者不知道该理解什么,总是让人望尔却步.那是因为大家太不了解网络,自己读不懂网络想表达的意思及其 ...

  9. 让Android的WebView支持html里面的文件上传

    默认情况下,Android的webview是不支持<input type=file>的,点击没有任何反应,如果希望点击上传,弹出选择文件.图片的窗口,那就需要自定义一个WebChromeC ...

  10. Linux 开启443端口

     1 在Linux终端输入指令: iptables -I INPUT -p tcp --dport 443 -j ACCEPT   2 回车之后继续输入指令,输入保存防火墙配置指令: service ...