题目链接  2016 CCPC东北地区大学生程序设计竞赛 B题

题意  给定一个无向图和一棵树,树上的每个结点对应无向图中的一条边,现在给出$q$个询问,

   每次选定树中的一个点集,然后真正被选上的是这些点以及这些点的所有祖先。

   只有标号在树中真正被选上的点代表的这些原图中的边是存在的,这样就构成了一个新的图。求这个图的连通块个数。

dfs整棵树,记$f[x]$为若$x$以及$x$的所有祖先被选上,那么构成的新的图的并查集)

这个实现比较简单,搜索的时候打上标记,回来的时候撤销即可。

这样预处理的时间复杂度是$O(nm)$的。

然后对于每个询问,把$k$个询问的并查集全部合并就可以了。

时间复杂度$O(nm + ∑kn)$

#include <bits/stdc++.h>

using namespace std;

#define rep(i, a, b)	for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
#define MP make_pair
#define fi first
#define se second typedef long long LL; const int N = 523;
const int M = 1e4 + 10; int T;
int ca = 0;
int n, m, q;
int ans;
int a[M], b[M], c[N], f[M][N];
int father[N];
vector <int> g[M]; int getfather(int x){
return father[x] == x ? x : father[x] = getfather(father[x]);
} void dfs(int x, int fa){
rep(i, 1, n) father[i] = f[fa][i];
int fx = getfather(a[x]);
int fy = getfather(b[x]);
father[fx] = fy;
rep(i, 1, n) father[i] = getfather(i);
rep(i, 1, n) f[x][i] = father[i];
for (auto u : g[x]){
dfs(u, x);
}
} int main(){ scanf("%d", &T);
while (T--){
printf("Case #%d:\n", ++ca);
scanf("%d%d", &n, &m);
rep(i, 0, m + 1) g[i].clear(); rep(i, 2, m){
int x;
scanf("%d", &x);
g[x].push_back(i);
} memset(a, 0, sizeof a);
memset(b, 0, sizeof b);
rep(i, 1, m){
scanf("%d%d", a + i, b + i);
} rep(i, 1, n) f[0][i] = i;
dfs(1, 0); scanf("%d", &q);
while (q--){
int y;
scanf("%d", &y);
rep(i, 1, n) father[i] = i;
rep(i, 1, y){
int x;
scanf("%d", &x);
memset(c, 0, sizeof c);
rep(j, 1, n){
int now = f[x][j];
if (c[now]){
int fx = getfather(c[now]);
int fy = getfather(j);
father[fx] = fy;
}
c[now] = j;
}
} ans = 0;
memset(c, 0, sizeof c);
rep(i, 1, n){
int x = getfather(i);
if (!c[x]) ++ans;
c[x] = 1;
}
printf("%d\n", ans);
}
} return 0;
}

  

HDU 5923 Prediction(2016 CCPC东北地区大学生程序设计竞赛 Problem B,并查集)的更多相关文章

  1. HDU 5925 Coconuts 【离散化+BFS】 (2016CCPC东北地区大学生程序设计竞赛)

    Coconuts Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  2. HDU 5929 Basic Data Structure 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)

    Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  3. HDU 5926 Mr. Frog's Game 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)

    Mr. Frog's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  4. HDU 5924 Mr. Frog’s Problem 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)

    Mr. Frog's Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  5. HDU 5922 Minimum’s Revenge 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)

    Minimum's Revenge Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  6. HDU 5927 Auxiliary Set 【DFS+树】(2016CCPC东北地区大学生程序设计竞赛)

    Auxiliary Set Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  7. 2016CCPC东北地区大学生程序设计竞赛1008/HDU 5929 模拟

    Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  8. 2016CCPC东北地区大学生程序设计竞赛 1008 HDU5929

    链接http://acm.hdu.edu.cn/showproblem.php?pid=5929 题意:给你一种数据结构以及操作,和一种位运算,最后询问:从'栈'顶到低的运算顺序结果是多少 解法:根据 ...

  9. 2016CCPC东北地区大学生程序设计竞赛 1005 HDU5926

    链接http://acm.hdu.edu.cn/showproblem.php?pid=5926 题意:给我们一个矩阵,问你根据连连看的玩法可以消去其中的元素 解法:连连看怎么玩,就怎么写,别忘记边界 ...

随机推荐

  1. iOS 中 AFNetworking HTTPS 的使用

    由于我们公司由HTTP转HTTPS,出现了一系列问题特此记录下. 一.HTTPS 二.App Transport Security 三.iOS 中用HTTPS 注意的问题 四.使用 AFNetwork ...

  2. 剑指Offer - 九度1384 - 二维数组中的查找

    剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...

  3. Java基础-4变量与数据类型

    变量:变量是Java程序中的一个基本存储单元.变量是一个标识符.类型及一个可选初始值的组合定义.所有的变量都有一个作用域,即变量在某一区域有效. 基本的变量声明方式如下: int a; float b ...

  4. python-压缩解压

    压缩解压包 #导入模块 import zipfile #新建压缩包并将db与ooo.xml压缩到文件中 z = zipfile.ZipFile('laxi.zip','w') z.write('db' ...

  5. day06_02 元组

    1.0 元组 元组被称为只读列表,即数据可以被查询,但不能被修改,所以,列表的切片操作同样适用于元组.元素卸载小括号(())里,元素之间用逗号隔开. tup1 = () #空元组 tup2 = (20 ...

  6. 孤荷凌寒自学python那些事第二天

    孤荷凌寒自学python第二天 Python的变量声明 (完整学习过程屏幕记录视频在文末,手写笔记在文末) Python的变量声明不必要显式指定变量类型 甚至也不需要进行显式的声明 比javascri ...

  7. COMMIT和ROLLBACK的用法

    从功能上划分,SQL语言可以分为DDL,DML和DCL三大类. 1.DDL(Data Definition Language)  数据定义语言,用于定义和管理 SQL 数据库中的所有对象的语言 : C ...

  8. maven中mapper.xml不发布的问题

    在自定义的包中定义了mapper.xml然后利用mybatis的扫描包形式来动态创建mapper 开启工程报错: 说无效的绑定 原因: 发布的war中,工程包中的mapper根本就没有出现在class ...

  9. Could not automatically select an Xcode project. Specify one in your Podfile like so

    需要将Podfile文件放置在根目录下,而不能放置在项目的里面. 更改路径即可

  10. linux下的静态库和共享库

    转载&&增加:      我们在编写一个C语言程序的时候,经常会遇到好多重复或常用的部分,如果每次都重新编写固然是可以的,不过那样会大大降低工作效率,并且影响代码的可读性,更不利于后期 ...