BZOJ.4151.[AMPPZ2014]The Cave(结论)
不是很懂他们为什么都要DFS三次。于是稳拿Rank1 qwq。
(三道题两个Rank1一个Rank3效率是不是有点高qwq?)
记以\(1\)为根DFS时每个点的深度是\(dep_i\)。对于一条限制\((a,b,D)\),满足条件的点\(x\)满足:\(dep_a+dep_b-2dep_x\leq D\Rightarrow dep_x\geq\frac{dep_u+dep_v-D}{2}\)。
那么\(dep_x\)最小是\(\max\{0,\ \lceil\frac{dep_u+dep_v-D}{2}\rceil\}\)(先不考虑负数的情况)。
记\(p\)为所有\(m\)条限制中,\(\max\{0,\ \lceil\frac{dep_u+dep_v-D}{2}\rceil\}\)最大的那个点\(x\)。
有一个结论是:若\(p\)不能满足所有限制,则一定无解。否则\(p\)为一个合法的解。
\(p\)就是要求最严格的限制所对应的那个点。对于和\(p\)不在同一棵子树里的限制,显然该限制要满足\(p\);在同一棵子树内的,因为\(p\)是最严格的,所以只要满足\(p\)就可以啦。
//13032kb 76ms
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
#define MAXIN 500000
//#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=3e5+5;
int Enum,H[N],nxt[N<<1],to[N<<1],fa[N],dep[N],A[N],B[N],D[N];
char IN[MAXIN],*SS=IN,*TT=IN;
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-48,c=gc());
return now;
}
inline void AE(int u,int v)
{
to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;
to[++Enum]=u, nxt[Enum]=H[v], H[v]=Enum;
}
void DFS(int x)
{
for(int i=H[x],v; i; i=nxt[i])
if((v=to[i])!=fa[x]) fa[v]=x, dep[v]=dep[x]+1, DFS(v);
}
int main()
{
for(int T=read(); T--; )
{
const int n=read(),m=read();
Enum=0, memset(H,0,n+1<<2);
for(int i=1; i<n; ++i) AE(read(),read());
dep[1]=0, fa[1]=0, DFS(1);
int mx=0,p=0;
for(int i=1; i<=m; ++i)
{
int t=dep[A[i]=read()]+dep[B[i]=read()]-(D[i]=read());
if(t>mx) mx=t, p=i;
}
if(!mx) {puts("TAK 1"); continue;}
int x=A[p];
for(int t=dep[x]-(mx+1)/2; t>0; --t,x=fa[x]);
dep[x]=0, fa[x]=0, DFS(x);
bool fg=1;
for(int i=1; i<=m; ++i)
if(dep[A[i]]+dep[B[i]]>D[i]) {fg=0; break;}
fg?printf("TAK %d\n",x):puts("NIE");
}
return 0;
}
BZOJ.4151.[AMPPZ2014]The Cave(结论)的更多相关文章
- bzoj 4152[AMPPZ2014]The Captain
bzoj 4152[AMPPZ2014]The Captain 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. ...
- 【BZOJ 4151 The Cave】
Time Limit: 5 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 293 Solved: 144[Submit][Status][Di ...
- 【BZOJ】2049: [Sdoi2008]Cave 洞穴勘测(lct/并查集)
http://www.lydsy.com/JudgeOnline/problem.php?id=2049 bzoj挂了..在wikioi提交,,1A-写lct的速度越来越快了-都不用debug-- 新 ...
- BZOJ 4144: [AMPPZ2014]Petrol
4144: [AMPPZ2014]Petrol Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 457 Solved: 170[Submit][Sta ...
- 循环队列+堆优化dijkstra最短路 BZOJ 4152: [AMPPZ2014]The Captain
循环队列基础知识 1.循环队列需要几个参数来确定 循环队列需要2个参数,front和rear 2.循环队列各个参数的含义 (1)队列初始化时,front和rear值都为零: (2)当队列不为空时,fr ...
- BZOJ 4152: [AMPPZ2014]The Captain( 最短路 )
先按x排序, 然后只有相邻节点的边才有用, 我们连起来, 再按y排序做相同操作...然后就dijkstra ---------------------------------------------- ...
- BZOJ 4143: [AMPPZ2014]The Lawyer( sort )
水题... 排序搞出每天的会议有哪些, 然后再按照会议的开始时间和结束时间排序, 最晚开始的和最早结束的会议不是同一场而且最晚开始的时间>最早结束的会议就有可能方案 -------------- ...
- BZOJ 4145: [AMPPZ2014]The Prices( 状压dp + 01背包 )
我自己只能想出O( n*3^m )的做法....肯定会T O( nm*2^m )做法: dp( x, s ) 表示考虑了前 x 个商店, 已买的东西的集合为s. 考虑转移 : 先假设我们到第x个商店去 ...
- BZOJ.4144.[AMPPZ2014]Petrol(Kruskal重构树)
BZOJ 看别人代码的时候发现哪一步都很眼熟,突然想起来,就在四个月前我好像看过还给别人讲过?mmp=v= 果然不写写就是容易忘.写了好歹忘了的时候还能复习呢(虽然和看别人的好像也没多少差别?). 首 ...
随机推荐
- 《.NET手札》
第一记 .net是一个平台,即.NET Framework平台 c#是基于.net平台的开发语言 .net的两种交互模式: B/S : 即浏览器(Browser)/服务器模式(Server) ...
- java项目发布到linux服务器,tomcat正常启动但没加载项目
问题描述: java项目发布到linux服务器,一切操作正确,linux命令启动tomcat后,查看日志启动tomcat正常,上传的war包已经解压成功,但是tomcat没加载项目. 解决方法: 1. ...
- SAVEPOINT 标记
create table duo( --创建表格 v_xuhao number(3), v_name varch ...
- thinkphp5+vue+iview商城 公众号+小程序更新版本
thinkphp5+vue+iview商城加分销 源码下载地址:http://github.crmeb.net/u/crmeb 演示站后台:http://demo25.crmeb.net 账号:dem ...
- React Router 4.x 开发,这些雷区我们都帮你踩过了
前言 在前端框架层出不穷的今天,React 以其虚拟 DOM .组件化开发思想等特性迅速占据了主流位置,成为前端开发工程师热衷的 Javascript 库.作为 React 体系中的重要组成部分:Re ...
- map集合的常用方法
package test; import java.util.Collection; import java.util.HashMap; import java.util.Map; import ja ...
- Java线程池(待续)
线程池是预先创建线程的一种技术..线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中.这些线程都是处于睡眠状态,即均为启动,不消耗CPU,而只是占用较小的内存空间.当请求到来之后,缓冲池给 ...
- session前后台交互
下面是需求需要,不同的人群进来显示不同,但是还必须是这个走到哪都的存在,不能说点击别的页面,下面红框处的数据就没有了,必须是存在的并且登陆的类型不一样,显示的也不一样,开始的时候想到的是直接调用方法, ...
- Python turtle模块小黄人程序
讲解Python初级课程的turtle模块,简单粗暴的编写了小黄人的程序.程序还需要进一步优化.难点就是要搞清楚turtle在绘制图形过程中的方向变化. import turtle t = turtl ...
- Linux S和T权限
S (setuid) 场景: 像修改密码的流程其实就是通过 /usr/bin/passwd 命令对 /etc/passwd进行修改,我们需要修改自己的密码(就是修改/etc/shadow),然而普通用 ...