Idiot的间谍网络
来源:互联网 发布:java把时间转换成毫秒 编辑:程序博客网 时间:2024/04/27 08:14
题目大意及模型转换
现在有n(n<=500000)个结点。
共m(m<=500000)次操作。
操作有三种:
1、一个没有父亲的结点x的父亲变为y。
2、所有x的祖先打上标记i。其中i满足之前已经出现过i-1次操作2。每个节点都可以有多个标记。
3、询问x是否有标记i。保证在此操作之前至少出现过i次操作2。
离线大法好
此题在线实在是麻烦。
我们可以发现,任何一个操作时形成的森林的父亲儿子顺序和最终形态一致(废话)。因此,观察2操作是一条链,在最终形态下其还是一条链。是不会变的!对,我们可以用离线大法。
离线大法好!
离线大法好!
离线大法好!
重要的事情要说三遍。我们可以保留每个标记对应链的开端和终止。那么询问一个点有没有标记i,就是问是不是在标记i对应链的开端和终止组成的路径上。
时间戳
由于是一条链。所以我们可以用时间戳解决。
即被询问点是开端的祖先,终止是被询问点的祖先。
注意
此题深搜处理时间戳爆栈(貌似说其实并不会)。
请打人工栈!
参考程序
#include<cstdio>#include<cstring>#include<stack>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;stack <int> s;int f[500005],g[500005],ans[500005],h[500005],next[500005],go[500005],dis[500005],st[500005],en[500005],fa[500005],fi[500005],xia[500005],qu[500005],now[500005];bool bz[500005];int i,j,k,l,t,n,m,tot,top,cnt;int read(){ int x=0; char ch=getchar(); while (ch<'0'||ch>'9') ch=getchar(); while (ch>='0'&&ch<='9'){ x=x*10+ch-'0'; ch=getchar(); } return x;}int getfa(int x){ if (fa[x]==x) return x; fa[x]=getfa(fa[x]); return fa[x];}void add1(int x,int y){ qu[++top]=y; xia[top]=fi[x]; fi[x]=top;}void add2(int x,int y,int z){ go[++tot]=y; dis[tot]=z; next[tot]=h[x]; h[x]=tot;}int main(){ n=read();m=read(); fo(i,1,n) fa[i]=i; fo(i,1,m){ t=read(); if (t==1){ j=read();k=read(); bz[j]=1; add1(k,j); j=getfa(j); k=getfa(k); fa[j]=k; } else if (t==2){ j=read(); st[++cnt]=j; en[cnt]=getfa(j); } else{ j=read(); k=read(); add2(k,j,i); } } tot=0; fo(i,1,n) now[i]=fi[i]; fo(i,1,n){ if (!bz[i]){ s.push(i); while (!s.empty()){ j=s.top(); if (now[j]==fi[j]) f[j]=++tot; if (!now[j]){ g[j]=++tot; s.pop(); continue; } t=now[j]; now[j]=xia[t]; s.push(qu[t]); continue; } } } fo(i,1,cnt){ t=h[i]; while (t){ j=go[t]; if (f[j]<=f[st[i]]&&g[j]>=g[st[i]]&&f[en[i]]<=f[j]&&g[en[i]]>=g[j]) ans[dis[t]]=1;else ans[dis[t]]=-1; t=next[t]; } } fo(i,1,m) if (ans[i]==1) printf("YES\n");else if (ans[i]==-1) printf("NO\n");}
0 0
- Idiot的间谍网络
- EZ的间谍网络
- 间谍网络
- 间谍网络
- Idiot 的乘幂
- 【codevs4093】EZ的间谍网络 tarjan
- CODEVS 4093 EZ的间谍网络
- 洛谷 P1262 间谍网络==Codevs 4093 EZ的间谍网络
- 日常训练 Idiot 的方程
- 日常训练 Idiot 的集合
- 网络间谍:你的共享文件夹网络监视器
- 洛谷 P1262 间谍网络
- 洛谷 P1262 间谍网络
- [洛谷P1262]间谍网络
- P1262间谍网络
- 洛谷 P1262 间谍网络
- 洛谷1262 间谍网络
- 洛谷 P1262 间谍网络
- 从Oracle迁移到Mysql之前必须知道的50件事
- 最小生成树算法—kcruscal算法
- 叶存菜鸟笔记之Map一般应用
- 互联网主要广告拍卖技术梳理
- ui-router
- Idiot的间谍网络
- 大猩猩会说话改变了人类对语言进化演变的看法
- 隐蔽无线微型摄像机购买推荐
- [Unity3D]关于Android真机调测Profiler
- 线索树
- GNU.ToolChains
- 关于MongoDB你需要知道的几件事
- UI 14 GET & POST 数据请求 & block异步
- VS2005中乱码问题