考虑离线,将删边操作倒过来变成加边,等价于询问每个点什么时候与1连通

使用并查集维护,每次合并时如果有一边是1所在连通块,就把另一边的所有点的答案更新

#include<cstdio>
#define N 200010
int n,m,i,j,x,y,son[N][2],del[N][2],q[N<<1][2],f[N],ans[N],g[N],nxt[N<<1],v[N<<1],ed;
inline void read(int&a){
char c;
while(!((((c=getchar())>='0')&&(c<='9'))||(c=='-')));
if(c!='-')a=c-'0';else{a=-1;getchar();return;}
while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';
}
inline void add(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
void dfs(int x,int pre,int y){
ans[x]=y;
for(int i=g[x];i;i=nxt[i])if(v[i]!=pre)dfs(v[i],x,y);
}
int F(int x){return f[x]==x?x:f[x]=F(f[x]);}
inline void merge(int x,int y,int z){
if(y<0)return;
if(F(x)==F(y))return;
if(f[x]==F(1))dfs(y,0,z);else if(f[y]==F(1))dfs(x,0,z);else add(x,y),add(y,x);
f[f[x]]=f[y];
}
int main(){
read(n),read(m);
for(i=1;i<=n;i++)read(son[i][0]),read(son[i][1]),f[i]=i;
for(i=0;i<m;i++)read(x),read(y),del[q[i][0]=x][q[i][1]=y-1]=1;
for(i=1;i<=n;i++)for(j=0;j<2;j++)if(!del[i][j])merge(i,son[i][j],-1);
for(i=m-1;~i;i--)merge(q[i][0],son[q[i][0]][q[i][1]],i);
for(puts("-1"),i=2;i<=n;i++)printf("%d\n",ans[i]);
return 0;
}

  

BZOJ2610 : [Poi2003]Monkeys的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. 【POI2003/2004 stage I】

    [原题在此] Let us consider a game on a rectangular board m x 1 consisting of m elementary squares number ...

  3. Twelves Monkeys (multiset解法 141 - ZOJ Monthly, July 2015 - H)

    Twelves Monkeys Time Limit: 5 Seconds      Memory Limit: 32768 KB James Cole is a convicted criminal ...

  4. HDU - 6178:Monkeys (贪心&树上最大匹配输&输入优化)

    There is a tree having N vertices. In the tree there are K monkeys (K <= N). A vertex can be occu ...

  5. zoj 3888 Twelves Monkeys 二分+线段树维护次小值

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemCode=3888 Twelves Monkeys Time Limit: 5 ...

  6. 思维+multiset ZOJ Monthly, July 2015 - H Twelves Monkeys

    题目传送门 /* 题意:n个时刻点,m次时光穿梭,告诉的起点和终点,q次询问,每次询问t时刻t之前有多少时刻点是可以通过两种不同的路径到达 思维:对于当前p时间,从现在到未来穿越到过去的是有效的值,排 ...

  7. ZOJ 3888 Twelves Monkeys (预处理+优先队列)

    题目链接:ZOJ 3888 Twelves Monkeys 题意:题目描写叙述起来比較绕,直接讲案例 9 3 3 9 1 6 1 4 1 6 7 2 输入n,m,q.n限制了你询问的年份,m台时光机, ...

  8. ZOJ 3888 Twelves Monkeys

    Twelves Monkeys Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Origina ...

  9. UVa11167 Monkeys in the Emei Mountain(最大流)

    题目大概说有n只猴子,猴子们在某个时间段需要喝vi时间的水,各个单位时间段最多允许m只猴子同时喝水,问猴子们能否成功喝水并输出一个可行的方案,输出方案的时间段区间要从小到大排序并且合并连续的区间. 首 ...

随机推荐

  1. [POJ1050]To the Max

    [POJ1050]To the Max 试题描述 Given a two-dimensional array of positive and negative integers, a sub-rect ...

  2. Coursera台大机器学习技法课程笔记01-linear hard SVM

    极其淡腾的一学期终于过去了,暑假打算学下台大的这门机器学习技法. 第一课是对SVM的介绍,虽然之前也学过,但听了一次感觉还是很有收获的.这位博主总结了个大概,具体细节还是 要听课:http://www ...

  3. poj1753枚举

    Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33670   Accepted: 14713 Descr ...

  4. Linux统计文件个数

    查看某个文件夹下的文件个数用ls列目录,用grep过虑,再用wc统计即可 用ls -l列出后, 每一行对应一个文件或目录, 如果第一个字母为’-'则为普通文件, 若为’d'则为子目录 + +grep过 ...

  5. IIS安装时,添加/编辑应用程序扩展名映射 确定按钮不可用。

    原因是:执行文件的路径太长,需要激活按钮. 方法一:选择较短路径的执行文件,先激活按钮. 方法二:点击该路径,就可以激活确认按钮了.

  6. c++关键字之#define typedef const

    [#define] #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查. [typedef] typedef只是为了增加可读性而为标识符另起的新名称 在自己的作用域内给一个已经存 ...

  7. sublime text 3 使用过程总结记录

    自定义的设置: "save_on_focus_lost": true //在文件失去焦点的时候自动保存

  8. Paths on a Grid(poj 1942)

    给定一个矩形网格的长m和高n,其中m和n都是unsigned int32类型,一格代表一个单位,就是一步,求从左下角到右上角有多少种走法,每步只能向上或者向右走. //注意循环的时候,要循环小的数,否 ...

  9. php 克隆和引用类

    /*class Ren { public $name; public $sex; function __construct($n,$s) { $this->name=$n; $this-> ...

  10. p235习题2

    List  成功添加 Set  添加失败