zxa and leaf

 Accepts: 25
 Submissions: 249
 Time Limit: 5000/2500 MS (Java/Others)
 Memory Limit: 65536/65536 K (Java/Others)
问题描述
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⋅10​4​​,1≤k≤n,1≤u,v≤n,1≤w≤10​9​​
输出描述
对于每组数据,输出一行,包含一个非负整数,表示这棵树的难看度最小值。
输入样例
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的更多相关文章

  1. HDU 5682 zxa and leaf 二分 树形dp

    zxa and leaf 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5682 Description zxa have an unrooted t ...

  2. T - zxa and leaf HDU - 5682 二分+dfs

    T - zxa and leaf HDU - 5682 题目大意是:给你一颗树,这棵树有些节点已经设置了它的美丽值,然后剩下一些节点需要我们设置美丽值. 一条边的丑陋程度等于被定义为由这个边缘连接的两 ...

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

  4. HDU 5683 zxa and xor 暴力模拟

    zxa and xor 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5683 Description zxa had a great interes ...

  5. HDU 5680 zxa and set (数学 推导结论)

    zxa and set 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/G Description zxa has a set , ...

  6. hdu 5683 zxa and xor 暴力

    zxa and xor Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Pro ...

  7. 做题记录 To 2019.2.13

    2019-01-18 4543: [POI2014]Hotel加强版:长链剖分+树形dp. 3653: 谈笑风生:dfs序+主席树. POJ 3678 Katu Puzzle:2-sat问题,给n个变 ...

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

  9. hdu 1316 How many Fibs?(高精度斐波那契数)

    //  大数继续 Problem Description Recall the definition of the Fibonacci numbers:  f1 := 1  f2 := 2  fn : ...

随机推荐

  1. dp4

    T1.机器分配(machine) 题目大意:把N台机器分给M个公司,每个公司分到不同数量机器有不同利润,求分配的最大利润. N<=100,M<=100 解题思路:一眼题啊.设a[x][y] ...

  2. 解决box-flex不均等分的问题

    我想当你上手css3的时候后一定为他的强大而感到震惊,但是震惊之后带来的一定是苦恼,因为他太TM变态了! 我之所以这么说是因为我今天写box-flex的时候遇到了一个可以让我蛋碎的问题~~~ 首先,b ...

  3. 6. js时间比较

    var v0 = ABS_DATESTRING(O_PARAMETER.FDate,"yyyy/MM/dd")var v_beginTime = v0 + " " ...

  4. java并发编程_CountDownLanch(倒计数锁存器)应用场景

    使用介绍: 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 用给定的计数 初始化 CountDownLatch.由于调用了 countDown() 方法,所以在 ...

  5. An attempt was made to load a program with an incorrect format

      用.net调用一个C++ 32位的DLL, 编译的时候选择x86, 在部署到一个64位的机器上的时候报错:"An attempt was made to load a program w ...

  6. 2016.02.17 JS DOM编程艺术 第四五六章

    看完这三章内容,集中精力,加快速度.

  7. c++学习笔记——字面值常量类

    字面值常量类:数据成员都是字面值类型的聚合类是字面值常量类.如果一个类不是聚合类,但是它符合一下要求,则它也是个字面值常量类: 1.数据成员都必须是字面值类型. 2.类必须至少含有一个constexp ...

  8. Net分布式系统之二:CentOS系统搭建Nginx负载均衡(下)

    上一篇文章介绍了VMWare12虚拟机.Linux(CentOS7)系统安装.部署Nginx1.6.3代理服务做负载均衡.接下来介绍通过Nginx将请求分发到各web应用处理服务. 一.Web应用开发 ...

  9. delete drop truncate 区别

    truncate 删除内容,并释放空间,并不删除表结构,删除标识列,标识列重新从1开始delete 删除内容,不释放空间,不删除表结构,不删除标识列,标识列继续增加drop 直接删除表

  10. 构建ASP.NET网站十大必备工具(1)

    最近使用ASP.NET为公司构建了一个简单的公共网站(该网站的地址:http://superexpert.com/).在这个过程中,我们使用了数量很多的免费工具,如果把构建ASP.NET网站的必备工具 ...