hdu5682 zxa and leaf【dfs+树形dp】
来源:互联网 发布:windows xp 解码器 编辑:程序博客网 时间:2024/05/17 12:06
#pragma comment(linker, "/STACK:102400000,102400000")#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<vector>using namespace std;const int N=5*10000+10;const long long up=1e9;int n,k;long long w[N],ll[N],rr[N];vector<int>v[N];int dfs(int u,int fa,long long x){ for(int i=0;i<v[u].size();i++) { int a=v[u][i]; if(a==fa) continue; if(dfs(a,u,x)==0) return 0; long long l=ll[a]-x; long long r=rr[a]+x; if(l>rr[u]||r<ll[u]) return 0; ll[u]=max(ll[u],l); rr[u]=min(rr[u],r); } return 1;}int check(long long x){ for(int i=1;i<=n;i++) { if(w[i]!=-1) rr[i]=ll[i]=w[i]; else rr[i]=up,ll[i]=-up; } if(dfs(1,-1,x)==1) return 1; else return 0;}int main(){ int _,a,b; long long L,R,mid,t,ans; scanf("%d",&_); while(_--) { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) v[i].clear(); for(int i=0;i<n-1;i++) { scanf("%d%d",&a,&b); v[a].push_back(b); v[b].push_back(a); } memset(w,0xff,sizeof(w)); for(int i=0;i<k;i++) { scanf("%d%lld",&a,&t); w[a]=t; } L=0; R=up; while(L<=R) { mid=L+(R-L)/2; if(check(mid)) { R=mid-1; ans=mid; } else { L=mid+1; } } printf("%lld\n",ans); } return 0;}
1 0
- hdu5682 zxa and leaf【dfs+树形dp】
- 二分+树型 dp hdu5682 zxa and leaf
- hdu 5682 zxa and leaf(树形DP+二分)
- HDU 5682 zxa and leaf 二分 树形dp
- HDU 5682 zxa and leaf
- HDU 5682 zxa and leaf
- hdu 5682 zxa and leaf 二分答案
- HDU 5682:zxa and leaf 二分
- BestCoder #83 1003 zxa and leaf(二分查找/BFS)
- hdu 5682 zxa and leaf (二分+搜索)
- codeforces 743D Chloe and pleasant prizes (DFS/树形DP)
- HDU1078(树形DP+DFS)
- hdu1520(树形DP+DFS)
- HDU1011树形DP+DFS
- zoj3201 树形DP+DFS
- HDU1561 树形DFS+DP
- HDU 3848 DFS 树形DP
- hdu2196 computer dfs 树形dp
- XCTest的应用
- Android 启动 卸载 安装 apk 的方法
- python数据抓取
- C语言模拟C++list
- Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
- hdu5682 zxa and leaf【dfs+树形dp】
- suse 11 Linux 静态路由的添加方法
- 搭建hadoop伪分布式遇到的一些问题
- Ubuntu下mysql启用远程访问
- 求n个数的最小公倍数与最大公约数
- java Cookie 设置和读取
- 总结:大学实验室的教授喜欢什么样的本科实习学生
- C++对C的扩展之函数重载
- stata---门限回归