hdu 5682 zxa and leaf
zxa and leaf
zxa有一棵含有nn个节点的无根树,包含(n-1)(n−1)条无向边,点从11到nn编号,定义每个点的度数为与这个点相连的边的数量,度数为11的节点被称作这棵树的叶子节点。 zxa想给每个节点设置它的好看度,好看度必须为正整数。他的无根树有m(1\leq m\leq n)m(1≤m≤n)个叶子节点,其中的k(1\leq k\leq m)k(1≤k≤m)个叶子节点的好看度已经确定,zxa只需要设置其他节点的好看度。 zxa很好奇,如果令每条边的难看度是这条边所连接的两个节点的好看度差值的绝对值,整棵树的难看度是所有边的难看度中的最大值,那么这棵树的难看度最小是多少,你能帮助他吗?
第一行有一个正整数TT,表示有TT组数据。 对于每组数据: 第一行有两个正整数nn和kk,表示这棵树有nn个节点,其中kk个叶子节点的好看度已经确定。 接下来(n-1)(n−1)行,每行有两个互异的正整数uu和vv,表示节点uu和节点vv之间有一条无向边。 接下来kk行,每行有两个正整数uu和ww,表示节点uu是叶子节点,而且它的好看度是ww。 每一行相邻数字之间只有一个空格。 保证输入的边构成一棵树。 1\leq T\leq 10,2\leq n\leq 5\cdot10^4,1\leq k\leq n,1\leq u,v\leq n,1\leq w\leq 10^91≤T≤10,2≤n≤5⋅104,1≤k≤n,1≤u,v≤n,1≤w≤109
对于每组数据,输出一行,包含一个非负整数,表示这棵树的难看度最小值。
2
3 2
1 2
1 3
2 4
3 9
6 2
1 2
1 3
1 4
2 5
2 6
3 6
5 9
3
1
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <map>
#include <queue>
#include <cstring>
using namespace std;
const int Max=5e4+;
typedef long long LL;
vector<int>book[Max];
const int inf=1e9+;
int vis1[Max],a[Max],vis2[Max];
int pnt[Max*],head[Max],nxt[Max*],e; //如果边数写错给小了,报超时什么鬼。。。
inline void addedge(int u,int v)
{
pnt[e]=v;nxt[e]=head[u];head[u]=e++;
}
int maxx[Max],minx[Max],limit;
bool dfs(int u)
{
int v;
maxx[u]=inf;minx[u]=; //每个虚节点节点范围设为无限大
if(vis1[u]) maxx[u]=minx[u]=a[u];
for(int i=head[u];i!=-;i=nxt[i])
{
v=pnt[i];
if(!vis2[v])
{
vis2[v]=;
if(!dfs(v)) return ; //先dfs,使得所有的节点都有范围
vis2[v]=;
maxx[u]=min(maxx[u],maxx[v]+limit);
minx[u]=max(minx[u],minx[v]-limit); //每一个节点的范围需要满足相邻节点的要求
}
}
return maxx[u]>=minx[u]; //每一个节点都必须满足条件
}
bool check(int len)
{
limit=len;
memset(vis2,,sizeof(vis2));
if(!dfs()) return ;
return ;
}
int main()
{
int T;
for(scanf("%d",&T);T;T--)
{
memset(head,-,sizeof(head));
memset(nxt,-,sizeof(nxt));
memset(pnt,-,sizeof(pnt));
memset(vis1,,sizeof(vis1));
int n,k,u,v;
scanf("%d%d",&n,&k);
e=;
for(int i=;i<=n-;i++)
{
scanf("%d%d",&u,&v);
addedge(u,v);
addedge(v,u);
}
for(int i=;i<=k;i++)
{
scanf("%d%d",&u,&v);
a[u]=v;
vis1[u]=;
}
int l=,r=inf,ans,mid; //二分求得答案
while(l<=r)
{
mid=(l+r)>>;
if(check(mid)) r=mid-,ans=mid;
else l=mid+;
}
printf("%d\n",ans);
}
return ;
}
hdu 5682 zxa and leaf的更多相关文章
- HDU 5682 zxa and leaf 二分 树形dp
zxa and leaf 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5682 Description zxa have an unrooted t ...
- T - zxa and leaf HDU - 5682 二分+dfs
T - zxa and leaf HDU - 5682 题目大意是:给你一颗树,这棵树有些节点已经设置了它的美丽值,然后剩下一些节点需要我们设置美丽值. 一条边的丑陋程度等于被定义为由这个边缘连接的两 ...
- HDU 5682/BestCoder Round #83 1003 zxa and leaf 二分+树
zxa and leaf Problem Description zxa have an unrooted tree with n nodes, including (n−1) undirected ...
- HDU 5683 zxa and xor 暴力模拟
zxa and xor 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5683 Description zxa had a great interes ...
- HDU 5680 zxa and set (数学 推导结论)
zxa and set 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/G Description zxa has a set , ...
- hdu 5683 zxa and xor 暴力
zxa and xor Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Pro ...
- 做题记录 To 2019.2.13
2019-01-18 4543: [POI2014]Hotel加强版:长链剖分+树形dp. 3653: 谈笑风生:dfs序+主席树. POJ 3678 Katu Puzzle:2-sat问题,给n个变 ...
- DFS——hdu5682zxa and leaf
一.题目回顾 题目链接:zxa and leaf Sample Input 2 3 2 1 2 1 3 2 4 3 9 6 2 1 2 1 3 1 4 2 5 2 6 3 6 5 9 Sample ...
- hdu 1316 How many Fibs?(高精度斐波那契数)
// 大数继续 Problem Description Recall the definition of the Fibonacci numbers: f1 := 1 f2 := 2 fn : ...
随机推荐
- org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not supported
1:先上控制台报错信息 org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not ...
- php数组转换成json格式。
{ "touser":"OPENID", "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0t ...
- Aspose.Words 的使用 Aspose.Total_for_.NET
最近在做有个业务需要Word做好模版,数据库取出业务数据在写入Word模版里面,然后生成PDF给客户端的业务人员 之前找了半天,没有找到用微软的Microsoft.Office.Interop.Wor ...
- eclipse下tomcat添加部署Module,Web名称与项目名称不一致的解决方法
问题描述: 使用eclipse,因为某种原因项目名称修改后,使用tomcat进行web发布时,选择“Add and Remove Projects...”或双击打开选择Modules选项卡后点击“An ...
- QlikView TEXT控件固定显示图片
QlikView 的Text控件不仅可以用来展示文本也可以用来展示图片. 数据表 2个列,一个是 关联字段(Country),另外一个保存图片物理路径. TEXT控件固定显示图片 ,编辑控件表达式 = ...
- zend 快捷键
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当前 ...
- Mybatis按SQL查询字段的顺序返回查询结果
在SpringMVC+Mybatis的开发过程中,可以通过指定resultType="hashmap"来获得查询结果,但其输出是没有顺序的.如果要按照SQL查询字段的顺序返回查询结 ...
- ios 学习总结之动画(转)
转自:http://blog.sina.com.cn/s/blog_a85effc301012wu4.html UIView的,翻转.旋转,偏移,翻页,缩放,取反的动画效果 翻转的动画 //开始动 ...
- 用定时器令P0(或其它IO口)产生多路方波
void Timer0_isr(void) interrupt 1 using 1{ static unsigned char i; //重新赋值 12M晶振计算,指令周期1uS,500x2=1mS ...
- 【python3】collections系列介绍
文章来源:http://www.jb51.net/article/48771.htm (http://www.cnblogs.com/wushank/p/5122786.html) 修改人:天马流行拳 ...