这题说的是给了一个公司员工100000 然后现在又3种操作第一种将y置为x的父亲,第二种操作将文件给第x个人签他签完给他的上司签,一直到没有上司为止,第三种操作问x是否签了第i份文件,然后 我们只要直到每两个点在最后形成的这颗树的位置只有祖先关系第一类   叔叔兄弟和其他的归为另一类,然后我们通过并查集判断他们是否在同一颗树中如果在判断他们的关系可以用刚刚处理出来的关系

处理这个关系用的是 访问的时间差可以判断是否为这个节点的孩子 看下面的代码 tin[x]<=tin[y]&&tou[x]>=tou[y] 那么y一定是x的孩子或者是x

#include <iostream>
#include <cstdio>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn =;
int tin[maxn],tou[maxn];
int tag[maxn];
vector<int>F[maxn];
int op[maxn],x[maxn],y[maxn];
int qusetion[maxn],time;
vector<int>ansquestion[maxn];
void dfs(int v, int p=-){
tin[v]=time++;
int L=F[v].size();
for(int i=; i<L; ++i){
int to = F[v][i];
if(to==p) continue;
dfs(to,v);
}
tou[v]=time++;
}
int per[maxn];
int fa(int a){
return per[a]= a==per[a]?a:fa(per[a]);
}
void unin(int a, int b){
a=fa(a); b=fa(b);
if(a!=b) per[a]=b;
}
bool ans[maxn];
int paatt(int a,int b){
return tin[a]<=tin[b]&&tou[a]>=tou[b];
}
int main()
{
memset(ans,false,sizeof(ans));
int n,m,number=;
scanf("%d%d",&n,&m);
for(int i=; i<m; ++i){
scanf("%d",&op[i]);
if(op[i]==){
scanf("%d",&x[i]);
}else scanf("%d%d",&x[i],&y[i]);
if(op[i]==){
F[y[i]].push_back(x[i]);
tag[x[i]]++;
}else if(op[i]==){
qusetion[i]=++number;
}else {
ansquestion[y[i]].push_back(i);
}
}
time=;
for(int i=; i<=n; ++i){
if(tag[i]!=||tin[i]!=) continue;
dfs(i);
}
for(int i=; i<=n; ++i)
per[i]=i; for(int i=; i<m; ++i){
if(op[i]==){ unin(x[i],y[i]);
}else if(op[i]==){
int an= qusetion[i];
int root=x[i];
int L = ansquestion[an].size();
for(int j=; j<L; ++j){
int to = ansquestion[an][j];
int in=x[to];
ans[to]=fa(in)==fa(root)&&paatt(in,root);
}
}
}
for(int i=; i<m; ++i)
if(op[i]==)
printf("%s\n",ans[i]?"YES":"NO");
return ;
}

466E - Information Graph 巧妙的判断祖先于孩子的关系的更多相关文章

  1. Codeforces 466E Information Graph

    Information Graph 把询问离线之后就能随便搞了, 去check一下是不是祖先, 可以用倍增也能用dfs序. #include<bits/stdc++.h> #define ...

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

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

  3. Codeforces 466 E. Information Graph

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

  4. Broken line - SGU 124(判断点与多边形的关系)

    题目大意:RT 分析:构造一条射线,如果穿越偶数条边,那么就在多边形外面,如果穿越奇数条边,那么就在多边形里面. 代码如下: ===================================== ...

  5. C# GDI+ 利用 Rectangle GraphicsPath 判断 矩形或多边形 图形关系

    最近在做一些简单的图像对比工作,总结了一些GDI+对象的使用方式,记录下来共享给大家使用. 判断Rectangl与多边形的关系 /// <summary> /// 是否包含输入范围 /// ...

  6. .NET(C#):判断Type类的继承关系

    //Type类的函数 class Type bool IsInstanceOfType(object); //判断对象是否是指定类型 //类型可以是父类,接口 //用法:父类.IsInstanceOf ...

  7. 在ios开发中nil和NUll和Nilde区别————和如何判断连个对象的关系和UISlider不能拖动的问题

    nil表示一个对象指针为空,针对对象 >示例代码: NSString *someString = nil; NSURL *someURL = nil; id someObject = nil; ...

  8. [置顶] 如何判断两个IP大小关系及是否在同一个网段中

    功能点  判断某个IP地址是否合法 判断两个IP地址是否在同一个网段中 判断两个IP地址的大小关系 知识准备 IP协议 子网掩码 Java 正则表达式 基本原理 IP地址范围 0.0.0.0- 255 ...

  9. POJ2318 TOYS(叉积判断点与直线的关系+二分)

    Calculate the number of toys that land in each bin of a partitioned toy box. Mom and dad have a prob ...

随机推荐

  1. Oracle的闪回操作

    Oracle10g中引入了闪回技术,但这并不意味着所有的表都能闪回成功,当没有足够的磁盘空间,Oracle将使用回收站中的磁盘空间,而且位图连接索引和引用完整性约束也不受回收站的保护. recycle ...

  2. IDEA Intellij 打开springboot项目 配置文件无法出现输入提示

    需要将java代码和资源文件进行标记

  3. LeetCode——Consecutive Numbers

    Description: Write a SQL query to find all numbers that appear at least three times consecutively. + ...

  4. Chrome浏览器下CSS字体大小设置小于12px无效问题

    当字体大小被设置小于12px时,IE.firefox可以起作用.但chrome中仍然显示为12px大小. 解决方法为: html, body {     -webkit-text-size-adjus ...

  5. POJ1125-Stockbroker Grapevine Floyd算法多源最短路径

    这题的思路还是比较简单,用弗洛伊德算法打表后,枚举来找到最小值 代码如下 注意最后判断时候的语句 在这里错误了很多次 # include<iostream> # include<al ...

  6. IPMI相关漏洞利用及WEB端默认口令登录漏洞

    IPMI相关漏洞 0套件漏洞 使用0套件时,只需要Username,口令任意即可绕过身份鉴别执行指令.而且一般还有一个默认的账户admin或者ADMIN. 备注:IPMI是一套主机远程管理系统,可以远 ...

  7. strace命令的使用

    author: headsen  chen date: 2018-08-28   21:25:48 跟踪一个命令的过程: [root@zabbix-test ~]# yum -y install st ...

  8. jvm的内存模型

    转自:https://www.cnblogs.com/dingyingsi/p/3760447.html 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互, ...

  9. 模拟退火算法(run away poj1379)

    http://poj.org/problem?id=1379 Run Away Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: ...

  10. 修改Yii2的默认语言language为中文zh-CN的方法

    如果用的语言是en-US的话,网页加载速度很慢,因为要加载国外镜像或者链接什么的,使用zh-CN就直接加载国内链接或者CDN,速度比较快: ------------------------------ ...