题解 Defence
发现最少次数只和最左,最右及中间最长的全0段有关
本来想启发式合并,结果发现直接线段树合并搭配一个类似山海经的方法就可以过了
- yysy,线段树单次合并的具体复杂度并不是 \(O(logn)\) ,只在所有 \(n\) 棵线段树的总插入量为 \(n\) 次时全部合并才约为 \(O(nlogn)\)
Code:
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 100010
#define ll long long
#define pb push_back
//#define int long long
char buf[1<<21], *p1=buf, *p2=buf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf, 1, 1<<21, stdin)), p1==p2?EOF:*p1++)
inline int read() {
int ans=0, f=1; char c=getchar();
while (!isdigit(c)) {if (c=='-') f=-f; c=getchar();}
while (isdigit(c)) {ans=(ans<<3)+(ans<<1)+(c^48); c=getchar();}
return ans*f;
}
int n, m, q;
int head[N], size, ans[N];
vector<int> pos[N];
struct edge{int to, next;}e[N<<1];
inline void add(int s, int t) {edge* k=&e[++size]; k->to=t; k->next=head[s]; head[s]=size;}
namespace force{
vector<int> line[N];
void dfs(int u) {
for (int i=head[u],v; i; i=e[i].next) {
v = e[i].to;
dfs(v);
for (auto it:line[v]) line[u].pb(it);
}
for (auto it:pos[u]) line[u].pb(it);
sort(line[u].begin(), line[u].end());
int usize=unique(line[u].begin(), line[u].end())-line[u].begin();
line[u].resize(usize);
//cout<<"at "<<u<<": "; for (auto it:line[u]) cout<<it<<' '; cout<<endl;
int l, mid=0, r;
if (line[u].size()==0) {ans[u]=-1; return ;}
l=line[u][0]-1; r=m-line[u][line[u].size()-1];
for (vector<int>::iterator it=line[u].begin(); it+1!=line[u].end(); ++it) {
mid=max(mid, *(it+1)-*it-1);
}
//cout<<"line: "<<l<<' '<<mid<<' '<<r<<endl;
ans[u]=max(l+r, mid);
}
void solve() {
dfs(1);
for (int i=1; i<=n; ++i) printf("%d\n", ans[i]);
exit(0);
}
}
namespace task{
int siz[N], msiz[N], mson[N], l[N], mid[N], r[N];
const int SIZE=N*55;
int tl[SIZE], tr[SIZE], lst[SIZE], rst[SIZE], lmax[SIZE], rmax[SIZE], mmax[SIZE], lson[SIZE], rson[SIZE], rot[N], tot;
bool exi[SIZE];
#define tl(p) tl[p]
#define tr(p) tr[p]
#define lst(p) lst[p]
#define rst(p) rst[p]
#define lmax(p) lmax[p]
#define rmax(p) rmax[p]
#define mmax(p) mmax[p]
#define l(p) lson[p]
#define r(p) rson[p]
#define exi(p) exi[p]
void pushup(int p) {
exi(p)=exi(l(p))|exi(r(p));
if (!exi(p)) return ;
lst(p)=min(lst(l(p)), lst(r(p)));
rst(p)=max(rst(l(p)), rst(r(p)));
lmax(p)=lst(p)-tl(p); rmax(p)=tr(p)-rst(p);
mmax(p)=max(rmax(l(p))+lmax(r(p)), max(mmax(l(p)), mmax(r(p))));
//mmax(p)=max(lst(r(p))-rst(l(p))-1, max(mmax(l(p)), mmax(r(p))));
//cout<<"pushup "<<p<<' '<<tl(p)<<' '<<tr(p)<<' '<<lst(p)<<' '<<rst(p)<<' '<<lmax(p)<<' '<<rmax(p)<<' '<<mmax(p)<<endl;
}
void upd(int& p, int l, int r, int pos) {
if (!p) {p=++tot; tl(p)=l; tr(p)=r;}
if (l==r) {exi(p)=1; lst(p)=rst(p)=pos; return ;}
int mid=(l+r)>>1;
if (pos<=mid) upd(l(p), l, mid, pos);
else upd(r(p), mid+1, r, pos);
pushup(p);
}
int merge(int p1, int p2) {
if (!(p1&&p2)) return p1|p2;
if (tl(p1)==tr(p1)) {
exi(p1)|=exi(p2);
lst(p1)|=lst(p2);
rst(p1)|=rst(p2);
return p1;
}
l(p1)=merge(l(p1), l(p2));
r(p1)=merge(r(p1), r(p2));
pushup(p1);
return p1;
}
void dfs1(int u) {
siz[u]=pos[u].size();
for (int i=head[u],v; i; i=e[i].next) {
v = e[i].to;
dfs1(v);
siz[u]+=siz[v];
if (siz[v]>msiz[u]) msiz[u]=siz[v], mson[u]=v;
}
}
void dfs2(int u) {
//cout<<"dfs2 "<<u<<endl;
for (int i=head[u],v; i; i=e[i].next) {
v = e[i].to;
dfs2(v);
}
rot[u]=rot[mson[u]];
for (int i=head[u],v; i; i=e[i].next) {
v = e[i].to;
if (v==mson[u]) continue;
rot[u]=merge(rot[u], rot[v]);
}
for (auto it:pos[u]) upd(rot[u], 1, m, it);
//cout<<"line"<<u<<": "<<(lst(rot[u])-1)<<' '<<(m-rst(rot[u]))<<' '<<mmax(rot[u])<<endl;
ans[u] = max((lst(rot[u])-1)+(m-rst(rot[u])), mmax(rot[u]));
if (ans[u]>m) ans[u]=-1;
}
void solve() {
//memset(lst, 0x3f, sizeof(lst));
//cout<<double(sizeof(tl)*10+sizeof(siz)*5)/1024/1024<<endl;
lst(0)=INF;
dfs1(1); dfs2(1);
//cout<<"rst: "<<rst(rot[1])<<endl;
for (int i=1; i<=n; ++i) printf("%d\n", ans[i]);
exit(0);
}
}
signed main()
{
n=read(); m=read(); q=read();
for (int i=1,u,v; i<n; ++i) {
u=read(); v=read();
add(u, v);
}
for (int i=1,u; i<=q; ++i) {u=read(); pos[u].pb(read());}
//force::solve();
task::solve();
return 0;
}
题解 Defence的更多相关文章
- 2014-2015 ACM-ICPC, Asia Xian Regional Contest(部分题解)
摘要 本文主要给出了2014-2015 ACM-ICPC, Asia Xian Regional Contest的部分题解,说明了每题的题意.解题思路和代码实现,意即熟悉区域赛比赛题型. Built ...
- 【题解】Jury Compromise(链表+DP)
[题解]Jury Compromise(链表+DP) 传送门 题目大意 给你\(n\le 200\)个元素,一个元素有两个特征值,\(c_i\)和\(d_i\),\(c,d \in [0,20]\), ...
- $vjudge-dp$专题题解
因为感觉题解写不了多少,,,就懒得一道道题目慢慢写了,汇总了算了$QAQ$ 昂然后因为我估计以后还会有些什么$dp$专题啊$balabala$的,,,然后谢总肯定又会建一堆小组啥的,,,所以还是放个链 ...
- 8.8考试总结(NOIP模拟33)[Hunter·Defence·Connect]
无法逃避的是自我,而无法挽回的是过去. 前言 还算可以,不过 T1 少 \(\bmod\) 了一下挂了 25pts,T2 没看清题面挂了 27pts. 下回注意吧.. T1 Hunter 解题思路 感 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
随机推荐
- ESP32-FAT文件系统使用磨损均衡存储文件笔记
基于ESP-IDF4.1 1 /* 2 FAT文件系统存储文件,使用磨损均衡库wear-leveling 3 */ 4 5 #include <stdlib.h> 6 #include & ...
- 交换机H3C S3100V2-52TP-WiNet
H3C S3100V2-52TP-WiNet参数 使用手册三层交换机 默认管理IP:192.168.0.234 将电脑IP设置为192.168.0.0这一组,网络连接交换机,默认用户名密码都为adm ...
- M1卡分类
M1卡复制前文说到,每一张M1卡的0扇区0块都是出厂时厂商赋予的绝对地址块,我们无法在M1卡内直接修改它. 说到这不得不提一下M1卡的复制子卡--UID卡,FUID卡,CUID卡. UID卡UID卡是 ...
- Java基础00-Stream流34
1. Stream流 Stream流 1.1 体验Stream流 代码示例: //需求:按照下面的要求完成集合的创建和遍历 public class StreamDemo { public stati ...
- 泛型(8)-Java7的"菱形"语法与泛型构造器
正如泛型方法允许在方法签名中声明泛型形参一样,Java也允许在构造器签名中声明泛型形参,这样就产生了所谓的泛型构造器. package com.j1803;class Foo{ public < ...
- [刘阳Java]_什么是EasyUI_第1讲
jQuery EasyUI在Java后台开发中用得还是比较多.当然客观来讲虽然前端技术的发展,很多后台界面设计都植入了前端技术的框架.但是这篇文章我个人觉得也不会妨碍我们对jQuery EasyUI的 ...
- 构建高效Presubmit卡点,落地测试左移最佳实践
樊登有一节课讲的挺有意思,说中国有个组织叫绩效改进协会,专门研究用技控代替人控的事情.其用麦当劳来举例子,他说麦当劳其实招人标准很低,高中文凭就可以,但是培养出来的人,三五年之后,每一个都是大家争抢的 ...
- P6106 [Ynoi2010] Self Adjusting Top Tree
P6106 [Ynoi2010] Self Adjusting Top Tree 题意 给出平面直角坐标系上若干不与坐标轴平行的处于第一象限的互不相交的线段,多次询问平面中一个第一象限的矩形与这些线段 ...
- 添加xxx到右键菜单
1. 添加notepad++到右键菜单[1] 添加到 右键菜单 将以下内容保存为 OpenWithNotepad++.reg 文件,双击运行即可(其中可执行文件路径和菜单项名称请自行替换): 注: 下 ...
- tp phpexcel 导出后台访问方法
public function phpexcel(){ //-----excel表导出 $dataid = $_GET['dataid']; $status = $_GET['status']; $F ...