[luogu3767]膜法
[luogu3767]膜法
luogu
神仙题
线段树分治+带权并查集
把每个操作看成点
首先这个操作的结构是一棵树
你发现每个点的对它的子树产生影响
我们可以想到用dfn序把它转成一段区间用线段树分治来做
但是还有删除操作,相当于在一个大区间里面挖掉几个小区间
可以对每个操作开一个vector记录区间搞一搞
然后带权并查集是模5意义下的,可以认为给你的操作相当于从u连向v的一条权值为1或2的边
当u,v在同一个集合时,判断是否满足条件,否则就连边
#define pb push_back
#define ls x<<1,l,mid
#define rs x<<1|1,mid+1,r
#include<bits/stdc++.h>
using namespace std;
const int _=1e5+5;
int re(){
int x=0,w=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*w;
}
int n,m,ts,top,dis;
int fa[_],del[_],sz[_],dfn[_],par[_],siz[_],d[_];
bool ans[_];
struct node{int u,v;}st[_];
struct edge{int u,v,w;}e[_];
vector<int>son[_],s[_];
vector<edge>t[_<<2];
void dfs(int u){
sz[u]=1;if(u)dfn[u]=++ts;
if(del[u])s[del[u]].pb(u);
for(int i=0,j=son[u].size();i<j;i++){
int v=son[u][i];
dfs(v);sz[u]+=sz[v];
}
}
void add(int&x,int y){x=(x+y)%5;}
int find(int x){
add(dis,d[x]);
if(x==par[x])return x;
return find(par[x]);
}
void upd(int x,int l,int r,int ql,int qr,edge E){
if(ql<=l&&r<=qr){t[x].pb(E);return;}
int mid=(l+r)>>1;if(ql<=mid)upd(ls,ql,qr,E);
if(qr>mid)upd(rs,ql,qr,E);
}
void solve(int x,int l,int r,bool ok){
int pre=top;
for(int i=0,j=t[x].size();i<j;i++){
int u=t[x][i].u,v=t[x][i].v,w=t[x][i].w;
dis=0;int fu=find(u),du=dis;
dis=0;int fv=find(v),dv=dis;
if(fu==fv&&(du-dv+5)%5!=w)ok=0;
if(fu^fv){
if(siz[fu]>siz[fv]){swap(du,dv);swap(u,v);swap(fu,fv);w=-w;}
siz[fv]+=siz[fu];par[fu]=fv;
d[fu]=(w+dv-du+10)%5;st[++top]=(node){fu,fv};
}
}
if(l==r)ans[l]=ok;
else{int mid=(l+r)>>1;solve(ls,ok);solve(rs,ok);}
while(top^pre){
int u=st[top].u,v=st[top].v;top--;
siz[v]-=siz[u];par[u]=u;d[u]=0;
}
}
int main(){
n=re(),m=re();
int op,u,v;
for(int i=1;i<=m;i++){
son[fa[i]=re()].pb(i);op=re();
if(op==3)del[i]=re();
else{u=re(),v=re();e[i]=(edge){u,v,op};}
}
dfs(0);
for(int i=1;i<=m;i++){
if(del[i])continue;
int k=s[i].size(),lst=dfn[i];
for(int j=0;j<k;j++){
int u=s[i][j];
if(lst<dfn[u])upd(1,1,m,lst,dfn[u]-1,e[i]);
lst=dfn[u]+sz[u];
}
if(lst<dfn[i]+sz[i])upd(1,1,m,lst,dfn[i]+sz[i]-1,e[i]);
}
for(int i=1;i<=n;i++)par[i]=i,siz[i]=1;
solve(1,1,m,1);
for(int i=1;i<=m;i++)puts(ans[dfn[i]]?"excited":"naive");
return 0;
}
[luogu3767]膜法的更多相关文章
- 【OpenJudge3531】【背包DP】【膜法交配律】判断整除
判断整除 总时间限制: 1000ms 内存限制: 65536kB [描述] 一个给定的正整数序列,在每个数之前都插入+号或-号后计算它们的和.比如序列:1.2.4共有8种可能的序列:(+1) + (+ ...
- luogu P3767 膜法
传送门 这题如果没有删除操作,可以直接使用可持久化并查集 注意到这种可持久化的依赖关系(是这样说的把)是一棵树,然后对于一个点,自己的操作会影响自己的那棵子树,并且如果是删除操作,就会使得一个子树没有 ...
- B - 低阶入门膜法 - D-query (查询区间内有多少不同的数)
题目链接:https://cn.vjudge.net/contest/284294#problem/B 题目大意:查询区间内有多少个不相同的数. 具体思路:主席树的做法,主席树的基础做法是查询区间第k ...
- A - 低阶入门膜法 - K-th Number (主席树查询区间第k小)
题目链接:https://cn.vjudge.net/contest/284294#problem/A 题目大意:主席树查询区间第k小. 具体思路:主席树入门. AC代码: #include<i ...
- BZOJ3669 膜法森林 - LCT
Solution 非常妙的排序啊... 仔细想想好像确实能够找出最优解QUQ 先对第一关键字排序, 在$LCT$ 维护第二关键字的最大值 所在的边. 添边时如果$u, v$ 不连通 就直接加边. 如 ...
- 2018.10.16 NOIP模拟 膜法(组合数学)
传送门 原题,原题,全TM原题. 不得不说天天考原题. 其实这题我上个月做过类似的啊,加上dzyodzyodzyo之前有讲过考试直接切了. 要求的其实就是∑i=lr(ii−l+k)\sum _{i=l ...
- NOIP模拟题 膜法
题目大意 给定若干组询问求$\sum\limits_{i=l}^r \dbinom{i}{k}$. 最终输出每组询问答案的乘积. 题解 首先把$l,r$分开处理相减,只需要求$\sum\limits_ ...
- 【bzoj5055】膜法师(离散化+树状数组)
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=5055 这道题……不得不说,从标题到题面都能看出一股浓浓的膜法气息……苟…… 题意就是统计顺序 ...
- 【PCB】扫盲总结
1.PCB是什么 PCB( Printed Circuit Board),中文名称为印制电路板,又称印刷线路板,是重要的电子部件,是电子元器件的支撑体,是电子元器件电气连接的载体.由于它是采用电子印刷 ...
随机推荐
- 字体和颜色 Font Color 基础笔记
private void SelectFontAndColor_Load(object sender, EventArgs e) {//窗体加载的时候,初始化字体 //返回所有的字体 FontFami ...
- beyond compare 软件学习
beyond compare 软件可以实现基本的文件对比,这点和 NotePad++ 的功能一样.但是在实现文件夹与文件夹之间的对比的话,就要使用 beyond compare 进行对比,效率是成倍提 ...
- UINavigationController改变动画效果
@interface UINavigationController (CustomTransition) - (void) pushWithCustomAnimation:(UIViewControl ...
- ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪
ASP.NET MVC深入浅出(被替换) 一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...
- Effective JavaScript Item 10 避免使用with
本系列作为Effective JavaScript的读书笔记. Item 9:避免使用withkeyword 重点: 设计withkeyword本来是为了让代码变简洁,可是却起到了相反的效果.比方: ...
- elasticsearch 单节点实现
一.安装java环境,这么不说了,一般用源码安装,配置好环境变量 二.新建es用户和组,es不能用root启动 三.下载需要的稳定版es 四.解压安装es .zip /opt/app/ es / 五. ...
- POJ1122_FDNY to the Rescue!(逆向建图+最短路树)
FDNY to the Rescue! Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2368 Accepted: 72 ...
- 【POJ 2400】 Supervisor, Supervisee(KM求最小权匹配)
[POJ 2400] Supervisor, Supervisee(KM求最小权匹配) Supervisor, Supervisee Time Limit: 1000MS Memory Limit ...
- 已经mock类中引用的其它service类,但是在invoke私有方法的时候,该service类是空值
错误原因:没有在开始测试用例的时候,初始化类的所有注解方法. 解决方法: 使用mock方法创建mock对象时,需要在测试用例执行前执行以下代码.通常, 这句代码可以放在测试基类或者@Before 中. ...
- [译]GLUT教程 - 位图字体
Lighthouse3d.com >> GLUT Tutorial >> Fonts >> Bitmap Fonts 位图字体一般是二维字体.虽然我们会把它放到三维 ...