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= 果然不写写就是容易忘.写了好歹忘了的时候还能复习呢(虽然和看别人的好像也没多少差别?). 首 ...
随机推荐
- ASP.Net获取Aras连接,并获取Innovator实例
首先需要在自己的项目bin目录下引入Aras的dll(../Aras\Innovator\Innovator\Server\bin). 注意:在引入Aras的dll时.需要注意自己的操作系统的位数.因 ...
- C51学习
十六个数字循环显示 #include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar uns ...
- python-类内置属性和内置方法
class A(): ''' 这是一个类 ''' banji=1 def __init__(self,name,age): self.name=name self.age=age def AA(sel ...
- C语言strcpy,strncpy和strlcpy讲解
前言 C风格的字符串处理函数有很多,如strcpy().strcat()等等. strcpy与strcat char* strcpy (char* dest, const char* src); ch ...
- python—异常
异常是在程序中不可避免的,当程序遇到一个异常时程序就会停止,可以使用try—except进行处理异常,即便在出现异常程序也可以继续运行. 语法: try: 代码 except 异常名: 处理异常的代码 ...
- iTOP-4418/6818开发板用户使用手册内容有哪些
更多内容分享,请继续期待 iTOP-6818开发板与4418开发板共兼容同一底板: 核心板:::::: 尺寸:50mm*60mm 高度:核心板连接器组合高度1.5mm ...
- 2018-2019-2 20165337《网络对抗技术》Exp2 后门原理与实践
基础问题回答 (1)例举你能想到的一个后门进入到你系统中的可能方式? 下载破解游戏,盗版电影或安装来历不明的软件,可能被留下后门. (2)例举你知道的后门如何启动起来(win及linux)的方式? w ...
- Java编程思想(前十章)
Java编程思想 有C++编程基础的条件下, 前10章可以快速过一下,都是基本语法,不需要花太多时间. 着重中后段的一些章节,类型信息.泛型.容器.IO.并发等. 中文翻译版 阅读地址 对于一个架构师 ...
- SQL解析
private static String getCountSql(String sql) { return "select count(*) from "+cutOrderByO ...
- WEB部分题目writeup
MEIZIJIU_PHP 题目链接: http://202.112.51.184:20001/ 打开网页出现一段PHP代码: 代码大意就是如果得到的code不为空则执行下列操作: 如果code长度大于 ...