Information Graph

把询问离线之后就能随便搞了, 去check一下是不是祖先, 可以用倍增也能用dfs序。

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. #define fi first
  4. #define se second
  5. #define mk make_pair
  6. #define PLL pair<LL, LL>
  7. #define PLI pair<LL, int>
  8. #define PII pair<int, int>
  9. #define SZ(x) ((int)x.size())
  10. #define ull unsigned long long
  11. using namespace std;
  12.  
  13. const int N = 1e5 + ;
  14. const int inf = 0x3f3f3f3f;
  15. const LL INF = 0x3f3f3f3f3f3f3f3f;
  16. const int mod = 1e9 + ;
  17. const double eps = 1e-;
  18.  
  19. int n, m, cnt, deg[N], fa[N], op[N], x[N], y[N], depth[N], f[N][];
  20. bool vis[N];
  21. bool ans[N];
  22. vector<int> G[N];
  23. vector<int> qus[N];
  24.  
  25. int getRoot(int x) {
  26. return x == fa[x] ? x : fa[x] = getRoot(fa[x]);
  27. }
  28.  
  29. void Merge(int x, int y) {
  30. fa[getRoot(x)] = getRoot(y);
  31. }
  32.  
  33. void dfs(int u, int fa, int idx) {
  34. vis[u] = idx;
  35. depth[u] = depth[fa] + ;
  36. f[u][] = fa;
  37. for(int i = ; i < ; i++)
  38. f[u][i] = f[f[u][i - ]][i - ];
  39. for(int& v : G[u]) if(!vis[v]) dfs(v, u, idx);
  40. }
  41.  
  42. bool check(int u, int v) {
  43. if(depth[u] < depth[v]) return false;
  44. if(vis[u] != vis[v]) return false;
  45. if(getRoot(u) != getRoot(v)) return false;
  46. for(int i = ; i >= ; i--)
  47. if(depth[f[u][i]] >= depth[v])
  48. u = f[u][i];
  49. return u == v;
  50. }
  51.  
  52. int main() {
  53. scanf("%d%d", &n, &m);
  54. for(int i = ; i <= n; i++) fa[i] = i;
  55. for(int i = ; i <= m; i++) {
  56. scanf("%d%d", &op[i], &x[i]);
  57. if(op[i] != ) scanf("%d", &y[i]);
  58. if(op[i] == ) qus[y[i]].push_back(i);
  59. if(op[i] == ) G[y[i]].push_back(x[i]), deg[x[i]]++;
  60. }
  61. for(int i = ; i <= n; i++)
  62. if(!deg[i]) dfs(i, , ++cnt);
  63. cnt = ;
  64. for(int i = ; i <= m; i++) {
  65. if(op[i] == ) {
  66. Merge(x[i], y[i]);
  67. } else if(op[i] == ) {
  68. cnt++;
  69. for(auto& p : qus[cnt])
  70. if(check(x[i], x[p]))
  71. ans[p] = true;
  72. }
  73. }
  74. for(int i = ; i <= m; i++)
  75. if(op[i] == ) printf("%s\n", ans[i] ? "YES" : "NO");
  76. return ;
  77. }
  78.  
  79. /**/

Codeforces 466E Information Graph的更多相关文章

  1. CodeForces 466E Information Graph --树形转线性+并查集

    题意:有三种操作: 1.新增一条边从y连向x,此前x没有父节点 2.x接到一份文件,(文件标号逐次递增),然后将这份文件一路上溯,让所有上溯的节点都接到这份文件 3.查询某个节点x是否接到过文件F 解 ...

  2. 466E - Information Graph 巧妙的判断祖先于孩子的关系

    这题说的是给了一个公司员工100000 然后现在又3种操作第一种将y置为x的父亲,第二种操作将文件给第x个人签他签完给他的上司签,一直到没有上司为止,第三种操作问x是否签了第i份文件,然后 我们只要直 ...

  3. Codeforces 466 E. Information Graph

    并查集.... E. Information Graph time limit per test 1 second memory limit per test 512 megabytes input ...

  4. Codeforces 1093D Beautiful Graph(二分图染色+计数)

    题目链接:Beautiful Graph 题意:给定一张无向无权图,每个顶点可以赋值1,2,3,现要求相邻节点一奇一偶,求符合要求的图的个数. 题解:由于一奇一偶,需二分图判定,染色.判定失败,直接输 ...

  5. Codeforces 986C AND Graph dfs

    原文链接https://www.cnblogs.com/zhouzhendong/p/9161514.html 题目传送门 - Codeforces 986C 题意 给定 $n,m (0\leq n\ ...

  6. CodeForces - 986C AND Graph

    不难想到,x有边连出的一定是 (2^n-1) ^ x 的一个子集,直接连子集复杂度是爆炸的...但是我们可以一个1一个1的消去,最后变成补集的一个子集. 但是必须当且仅当 至少有一个 a 等于 x 的 ...

  7. [Codeforces 1178D]Prime Graph (思维+数学)

    Codeforces 1178D (思维+数学) 题面 给出正整数n(不一定是质数),构造一个边数为质数的无向连通图(无自环重边),且图的每个节点的度数为质数 分析 我们先构造一个环,每个点的度数都是 ...

  8. Codeforces 986C - AND Graph(dfs)

    Codeforces 题面传送门 & 洛谷题面传送门 考虑 DFS 一遍遍历每个连通块. 当我们遍历到一个点 \(x\) 时,我们就建立一个虚点 \((2^n-1-x)'\) 表示我们要访问 ...

  9. Codeforces 1288F - Red-Blue Graph(上下界网络流)

    Codeforces 题面传送门 & 洛谷题面传送门 好久没有写过上下界网络流了,先来一题再说( 首先先假设所有边都是蓝边,那么这样首先就有 \(b\times m\) 的花费,但是这样不一定 ...

随机推荐

  1. HGOI 20181103 题解

    problem:把一个可重集分成两个互异的不为空集合,两个集合里面的数相乘的gcd为1(将集合中所有元素的质因数没有交集) solution:显然本题并不是那么容易啊!考场上想了好久.. 其实转化为上 ...

  2. 洛谷 P2303 [SDOi2012]Longge的问题 解题报告

    P2303 [SDOi2012]Longge的问题 题目背景 SDOi2012 题目描述 Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数\(N\),你需要 ...

  3. IntelliJ IDEA 创建Java Web项目

    1. 创建Web项目 可以先阅读 IntelliJ IDEA 的安装和使用教程 注意:IntelliJ IDEA 中 Project 和 Module 的概念及区别 创建完成后点击Import Cha ...

  4. 【CC】Batman and Tree

    Portal --> CC Batman and Tree Solution 一开始看到很懵..感觉无从下手(因为自己太菜了qwq) ​ 膜拜了题解之后发现好像并没有想象的那么复杂qwq ​ 其 ...

  5. js中全局变量修改后的值不生效【jsp页面中各个js中内容的加载顺序】

    一个老项目中,一个jsp文件中有很多个js文件, 现在要在页面上的一个地方判断一个状态,因为一直找不到原来是在哪里修改的那个状态,所以决定不找了,而是在比较靠前引入的一个js中定义一个全局变量,然后在 ...

  6. Elasticsearch 5.0 安装 Search Guard 5 插件

    一.Search Guard 简介 Search Guard  是 Elasticsearch 的安全插件.它为后端系统(如LDAP或Kerberos)提供身份验证和授权,并向Elasticsearc ...

  7. php 访问错误日志

    /usr/local/php/var/log/php-fpm.log」—————————

  8. 流媒体技术学习笔记之(七)进阶教程OBS参数与清晰度流畅度的关系

    源码地址:https://github.com/Tinywan/PHP_Experience 很多主播问过OBS的参数到底什么影响画质,到底什么影响流畅度,那么本篇教程尽量用通俗的语言解释下一些重要参 ...

  9. J2EE完全手册(二)

    1.2 客户端 (Web客户端,应用程序客户端) 1.2.1 Web客户端: 一般简单讲,就是显示由在Web层的web组件中生成的包含Html 及 XML标记语言的动态Web页面(.jsp[.do]) ...

  10. Tornado实现多线程、多进程HTTP服务

    背景 线上有一个相关百科的服务,返回一个query中提及的百科词条.该服务是用python实现的,以前通过thrift接口访问,现要将其改为通过HTTP访问.之前没有搭建HTTPServer的经验,因 ...