Cutting Tree

题目连接:

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4922

Description

Tree in graph theory refers to any connected graph (of nodes and edges) which has no simple cycle,

while forest corresponds to a collection of one or more trees. In this problem, you are given a forest of

N nodes (of rooted trees) and K queries. Each query is in the form of:

• C x : remove the edge connecting node and its parent. If node has no parent, then ignore this

query.

• Q a b : output ‘YES’ if there is a path from node to node in the forest; otherwise, ‘NO’.

For example, let the initial forest is shown by Figure 1.

Figure 1. Figure 2.

Let’s consider the following queries (in order):

  1. Q 5 7 : output YES.
  2. C 2 : remove edge (2, 1) — the resulting forest is shown in Figure 2.
  3. Q 5 7 : output NO, as there is no path from node 5 to node 7 in Figure 2.
  4. Q 4 6 : output YES.

Input

The first line of input contains an integer T (T ≤ 50) denoting the number of cases. Each case begins

with two integers: N and K (1 ≤ N ≤ 20, 000; 1 ≤ K ≤ 5, 000) denoting the number of nodes in the

forest and the number of queries respectively. The nodes are numbered from 1 to N. The next line

contains N integers Pi (0 ≤ Pi ≤ N) denoting the parent of i-th node respectively. Pi = 0 means that

node i does not have any parent (i.e. it’s a root of a tree). You are guaranteed that the given input

corresponds to a valid forest. The next K lines represent the queries. Each query is in the form of ‘C

x’ or ‘Q a b’ (1 ≤ x, a, b ≤ N), as described in the problem statement above

Output

For each case, output ‘Case #X:’ in a line, where X is the case number starts from 1. For each ‘Q

a b’ query in the input, output either ‘YES’ or ‘NO’ (without quotes) in a line whether there is a path

from node a to node b in the forest.

Explanation for 2nd sample case:

The initial forest is shown in Figure 3 below.

  1. C 3 : remove edge (3, 2) — the resulting forest is shown in Figure 4.
  2. Q 1 2 : output YES.
  3. C 1 : remove edge (1, 2) — the resulting forest is shown in Figure 5.
  4. Q 1 2 : output NO as there is no path from node 1 to node 2 in Figure 5

Sample Input

4

7 4

0 1 1 2 2 2 3

Q 5 7

C 2

Q 5 7

Q 4 6

4 4

2 0 2 3

C 3

Q 1 2

C 1

Q 1 2

3 5

0 3 0

C 1

Q 1 2

C 3

C 1

Q 2 3

1 1

0

Q 1 1

Sample Output

Case #1:

YES

NO

YES

Case #2:

YES

NO

Case #3:

NO

YES

Case #4:

YES

Hint

题意

给你个森林,俩操作,1是砍掉与他父亲的连边,2是查询xy是否在同一个连通块里面

题解:

倒着做,砍边就变成连边了,然后并茶几莽一波就好了

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e4+7;
int cas = 0;
int fa[maxn];
int e[maxn];
int flag[maxn];
int a[maxn],b[maxn],c[maxn];;
int fi(int x){
if(x==fa[x])return x;
return fa[x]=fi(fa[x]);
}
void init(){
memset(flag,0,sizeof(flag));
}
void solve(){
init();
vector<int>ans;
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
fa[i]=i;
for(int i=1;i<=n;i++)
scanf("%d",&e[i]);
for(int i=1;i<=m;i++){
string s;cin>>s;
if(s[0]=='C'){
a[i]=1;
scanf("%d",&b[i]);
flag[b[i]]++;
}else{
a[i]=0;
scanf("%d%d",&b[i],&c[i]);
}
}
for(int i=1;i<=n;i++){
if(flag[i]==0&&e[i]!=0){
fa[fi(i)]=fi(e[i]);
}
}
for(int i=m;i>=1;i--){
if(a[i]==1){
flag[b[i]]--;
if(flag[b[i]]==0&&e[b[i]]!=0)
fa[fi(b[i])]=fi(e[b[i]]);
}else{
if(fi(b[i])==fi(c[i]))ans.push_back(1);
else ans.push_back(0);
}
}
for(int i=ans.size()-1;i>=0;i--){
if(ans[i])printf("YES\n");
else printf("NO\n");
}
}
int main(){
//freopen("1.txt","r",stdin);
int t;
scanf("%d",&t);
while(t--){
printf("Case #%d:\n",++cas);
solve();
}
return 0;
}

UVALive 6910 Cutting Tree 并查集的更多相关文章

  1. uva 6910 - Cutting Tree 并查集的删边操作,逆序

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  2. UVALive 6910 Cutting Tree(离线逆序并查集)

    [题目]:(地址:) http://acm.hust.edu.cn/vjudge/contest/view.action?cid=97671#problem/E [题意]: 给出多棵树和两类操作:操作 ...

  3. UVALive 6910 Cutting Tree(并查集应用)

    总体来说,这个题给的时间比较长,样例也是比较弱的,别的方法也能做出来. 我第一次使用的是不合并路径的并查集,几乎是一种暴力,花了600多MS,感觉还是不太好的,发现AC的人很多都在300MS之内的过得 ...

  4. Hdu.1325.Is It A Tree?(并查集)

    Is It A Tree? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  5. Is It A Tree?(并查集)

    Is It A Tree? Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26002   Accepted: 8879 De ...

  6. CF109 C. Lucky Tree 并查集

    Petya loves lucky numbers. We all know that lucky numbers are the positive integers whose decimal re ...

  7. HDU 5606 tree 并查集

    tree 把每条边权是1的边断开,发现每个点离他最近的点个数就是他所在的连通块大小. 开一个并查集,每次读到边权是0的边就合并.最后Ans​i​​=size[findset(i)],size表示每个并 ...

  8. [Swust OJ 856]--Huge Tree(并查集)

    题目链接:http://acm.swust.edu.cn/problem/856/ Time limit(ms): 1000 Memory limit(kb): 10000 Description T ...

  9. Codeforces Round #363 (Div. 2)D. Fix a Tree(并查集)

    D. Fix a Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

随机推荐

  1. bzoj千题计划215:bzoj1047: [HAOI2007]理想的正方形

    http://www.lydsy.com/JudgeOnline/problem.php?id=1047 先用单调队列求出每横着n个最大值 再在里面用单调队列求出每竖着n个的最大值 这样一个位置就代表 ...

  2. 使用JavaScript缓存图片

    在JS中,为了让图片缓存起来,客户端JS定义了一个API,首先利用Image()构造函数来创建一个屏幕外图片对象,之后将该对象的src属性设置 期望的URL,由于图片元素并没有添加到文档中,因此它是不 ...

  3. javascript类式继承函数最优版

    直接上代码: klass函数 var klass = function (Parent, props) { var Child, F, i; //1.新构造函数 Child = function () ...

  4. 关于Cookie跨域的问题

    Cookie是一个伟大的发明,它允许Web开发者保留他们的用户的登录状态.但是当你的站点有一个以上的域名时就会出现问题了.在Cookie规范上说,一个cookie只能用于一个域名,不能够发给其它的域名 ...

  5. ASP.net 控件实现数据级联

    今天我们来一起用ASP.net实现一个级联,这个小不点应该是会经常用到的的. 咱们简单的画两个窗体.文本框会根据下拉框所选的内容显示不同的内容. 具体实现效果如下 步骤一: 准备工作,建立相应的数据库 ...

  6. Guava HashMultiset(MultiSet)

    multiset:多重集合,和set唯一的不同是 set 集合中一个值只能出现一次,而multiset多重集合中一个值可以出现多次.一个典型的应用就是统计单词出现次数 举例: public class ...

  7. mysql innobackupex 备份及恢复

    ----------------------------------全量备份恢复-------------------------------------1.生成一个完整的备份 innobackupe ...

  8. elasticsearch RTF版本介绍

    说明:elastic search官方版本没有集成中文分词以及各种插件,需要手动配置,手动编译jar,对Windows用户很不友好.下载地址:https://github.com/medcl/elas ...

  9. sublime sftp 打开远程文件夹

    2014-04-29 13:19:09 总结: 本文介绍两种方法,推荐第二种方法(samba+windows映射) 先贴出sublime打开远程(Linux)目录所需的配置文件(sublime是通过s ...

  10. Nginx安装方式探究

    Ubuntu 16.04(阿里云ECS),Nginx 1.10.3 (Ubuntu) 本文探究两种安装方式: 1.源码安装(手动) 2.APT安装(自动) 源码安装(手动) 步骤简介: 下载.解压.. ...