Defence
emm...这道题我调了一下午你敢信??
好吧还是我太天真了。
开始的时候以为自己线段树动态开点与合并写错了,就调;
结果发现没问题,那就是信息维护错了。
一开始以为自己最左右的1维护错了,后来与同学标程对拍,没问题。
最后才发现是自己维护最长的0序列时错了,具体的说是,动态开点线段树只有操作过的地方才有实际的点,因此我就忽略了没有插过点的区间是0序列,会给序列长度贡献,因此我就错了。
后来同学提醒才想起来。
然而还是\(WA\)。。。。。。
于是今天下午,坐后面的同学与老师就看到了前排一个抓狂的人,没错就是我。
最终,当我在抓狂中冷静下来时,我看到同学的程序里是在\(DFS\)是实时记录答案,我才猛然想起来:
段树合并时,原来的树信息会被合并到另外一棵树上,这个过程中会有信息的修改与丢失,也就是说,这个过程对原来的某些信息是不安全的。
改掉他后,我就\(A\)了。。。。。。
真是无语了。。。。。。
就当花一下午买个记性吧,正好暴露出我对这个东西不熟,又要复习了。
Code
#include<bits/stdc++.h>
using namespace std;
namespace STD
{
#define rr register
typedef long long ll;
const int N=100004;
const int inf=INT_MAX;
int n,m,q;
int to[N],dire[N],head[N];
template<typename T> T cmax(rr T x,rr T y){return x>y?x:y;}
template<typename T> T cmin(rr T x,rr T y){return x<y?x:y;}
inline void add(int f,int t)
{
static int num=0;
to[++num]=t;
dire[num]=head[f];
head[f]=num;
}
int read()
{
rr int x_read=0,y_read=1;
rr char c_read=getchar();
while(c_read<'0'||c_read>'9')
{
if(c_read=='-') y_read=-1;
c_read=getchar();
}
while(c_read<='9'&&c_read>='0')
{
x_read=(x_read<<3)+(x_read<<1)+(c_read^48);
c_read=getchar();
}
return x_read*y_read;
}
class sgt
{
private:
int tot;
int in;
int root[N];
int le[N*30],re[N*30];
int len[N*30],lc[N*30];
int rc[N*30];
int Merge(int,int,int,int);
void Insert(int&,int,int,int);
inline void push_up(int,int,int);
int cmax(int x,int y){return x>y?x:y;}
public:
sgt()
{
tot=0;
memset(le,127,sizeof le);
memset(re,128,sizeof re);
memset(len,128,sizeof len);
memset(lc,0,sizeof lc);
memset(rc,0,sizeof rc);
in=le[3];
}
void insert(int id,int pos){Insert(root[id],1,m,pos);}
void merge(int x,int y){root[x]=Merge(root[x],root[y],1,m);}
int query(int id)
{
if(!root[id]) return -1;
return cmax(len[root[id]],m-re[root[id]]+le[root[id]]-1);
}
}t;
inline void sgt::push_up(int id,int l,int r)
{
int mid=(l+r)>>1;
if(lc[id])
{
le[id]=le[lc[id]];
re[id]=re[lc[id]];
len[id]=max(len[lc[id]],le[id]-l);
if(rc[id])
{
len[id]=max(len[id],len[rc[id]]);
len[id]=max(len[id],le[rc[id]]-re[lc[id]]-1);
re[id]=re[rc[id]];
}
else
len[id]=max(len[id],r-re[id]);
}
else
{
if(!rc[id]) return;
le[id]=le[rc[id]];
re[id]=re[rc[id]];
len[id]=max(len[rc[id]],le[id]-l);
}
}
void sgt::Insert(int &id,int l,int r,int pos)
{
if(!id) id=++tot;
if(l==r)
{
le[id]=l;
re[id]=r;
len[id]=0;
return;
}
int mid=(l+r)>>1;
if(pos<=mid) Insert(lc[id],l,mid,pos);
else Insert(rc[id],mid+1,r,pos);
len[id]=-inf;
push_up(id,l,r);
}
int sgt::Merge(int id1,int id2,int l,int r)
{
if(!id1||!id2) return id1+id2;
if(l==r)
{
le[id1]=l;
re[id1]=r;
len[id1]=0;
return id1;
}
int mid=(l+r)>>1;
lc[id1]=Merge(lc[id1],lc[id2],l,mid);
rc[id1]=Merge(rc[id1],rc[id2],mid+1,r);
push_up(id1,l,r);
return id1;
}
int ans[N];
void dfs(int x)
{
for(rr int i=head[x];i;i=dire[i])
{
dfs(to[i]);
t.merge(x,to[i]);
}
ans[x]=t.query(x);
}
};
using namespace STD;
int main()
{
n=read(),m=read(),q=read();
for(rr int i=1;i<n;i++)
{
int u=read(),v=read();
add(u,v);
}
for(rr int i=1;i<=q;i++)
{
int u=read(),p=read();
t.insert(u,p);
}
dfs(1);
for(rr int i=1;i<=n;i++)
printf("%d\n",ans[i]);
}
Defence的更多相关文章
- Dedecms include\dialog\select_soft_post.php Upload Any Files To The Specified Directory Via Variable Not Initial Flaw Bypass Extension Defence
目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 综合来说,这个漏洞的根源是"register_globals = on& ...
- Last Defence (run time error)
Last Defence时间限制:1000 ms | 内存限制:65535 KB描述Given two integers A and B. Sequence S is defined as follo ...
- UVALive 7045 Last Defence
ProblemK. Last Defence Description Given two integersA and B. Sequence S is defined as follow: • S0 ...
- Last Defence (2014 西安现场赛)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=94237#problem/K Last Defence Time Limit:3000MS ...
- Unity2D项目-平台、解谜、战斗! 1.2战斗组件Defence、Attack
各位看官老爷们,这里是RuaiRuai工作室,一个做单机游戏的兴趣作坊. 接上文,我们定义了两个分别具有"攻击"和"被攻击"语义的组件CanFight和CanB ...
- CF175E Power Defence
CF175E Power Defence 题意 一个塔防游戏:给定一个无限长的数轴,一个无限血的敌人要从正无穷走到负无穷.你的任务是放置三种塔,包含两种攻击塔和一种寒冰塔,使得敌人受到的伤害最大. 其 ...
- 8.8考试总结(NOIP模拟33)[Hunter·Defence·Connect]
无法逃避的是自我,而无法挽回的是过去. 前言 还算可以,不过 T1 少 \(\bmod\) 了一下挂了 25pts,T2 没看清题面挂了 27pts. 下回注意吧.. T1 Hunter 解题思路 感 ...
- 20210808 Hunter,Defence,Connect
考场 乍一看都不可做 T1 算了半天样例,一直算出来 \(\frac{81}{400}\),直接丢了 T1 推了推发现是求最长连续 \(0\) 的数量,那就是线段树合并加上<玫瑰花精> T ...
- hdu 5779 Tower Defence
题意:考虑由$n$个结点构成的无向图,每条边的长度均为$1$,问有多少种构图方法使得结点$1$与任意其它节点之间的最短距离均不等于$k$(无法到达时距离等于无穷大),输出答案对$1e9+7$取模.$1 ...
- uva 1471 defence lines——yhx
After the last war devastated your country, you - as the king of the land of Ardenia - decided it wa ...
随机推荐
- mongodb(27017、28017)未授权访问
重启docker systemctl restart docker.service 下载mingodb docker pull mongo:3.6 列出镜像 docker images mongo 创 ...
- GoogleTest死亡测试的跨平台BUG
最近工作用到了GoogleTest来作单元测试,但是死亡测试的ASSERT_DEATH语句一直跑不通. GoogleTest会启动子进程来运行代码,并捕捉子进程的错误消息,这就是所谓的"死亡 ...
- FastAPI实战:简易MockServe
Mock 我个人理解就是为了伪造返回结果的东西,MockServe通常说的就是接口未开放完成但是现在需要调用,所以无论是通过转发还是直接访问这个url,其结果基本就是自己定义的 当然做仔细点就是 给个 ...
- 无法解析插件 org.apache.maven.plugins:maven-clean-plugin:2.5
在Idea创建项目中,出现7出错误,告诉我 无法解析插件 org.apache.maven.plugins:maven-clean-plugin:2.5 但是在maven设置中都一致 后来加了几个镜像 ...
- Python中strip()、lstrip()、rstrip()函数的用法
Python中使用函数strip().lstrip().rstrip()来剔除字符串前后的特定字符 函数语法为:str.strip(chars) 返回值是一个新的字符串,不更改源字符串 其中,参数ch ...
- 线程的常用知识(包括 Thread/Executor/Lock-free/阻塞/并发/锁等)
本次内容列表: 1.使用线程的经验:设置名称.响应中断.使用ThreadLocal 2.Executor:ExecutorService和Future 3.阻塞队列:put和take.offer和po ...
- Access, Modify, Change Time of Linux File
All these 3 time can be viewed by "stat " command. Access time is influenced by read opera ...
- 带你读AI论文丨用于目标检测的高斯检测框与ProbIoU
摘要:本文解读了<Gaussian Bounding Boxes and Probabilistic Intersection-over-Union for Object Detection&g ...
- VRRP的基本配置
一.实验拓扑 二.实验编址 三.实验步骤: 1.设置PC的IP等信息 2.启动设备(全选) 3.设置路由器端口ip 4. 配置ospf网络 查看: 5.配置VRRP协议 配置完成后查看: 6.验证主备 ...
- 题解 God Knows
传送门 这里有个线段树维护单调栈的神仙技巧 同机房dalao @Yubai的不同理解方式 yysy,我考场上连\(n^2\)的暴力都没搞出来 这里实际上求的是最小权极大上升子序列 但这个跟题目几乎没什 ...