hackerrank [Week of Code 33] Bonnie and Clyde

题意:给一个图,每次询问给三个点a,b,c,问是否存在一条从a到c,一条b到c的路径除c外无交点。
双连通分量缩点建出圆方树是必须的,然后我们需要判断c是否在a到b的路径上,或者c的某个相邻的方点(新建的节点)在a到b的路径上。最后这玩意判了很久就是一直不对,去膜了ccz代码……哦,lca(a,b),lca(a,c),lca(b,c)只有俩不同取值,异或一下就得到多余的一个,然后就很好判了。
#include<cstdio>
#include<algorithm>
#define MN 3100001
using namespace std; int read_p,read_ca;
inline int read(){
read_p=;read_ca=getchar();
while (read_ca<''||read_ca>'') read_ca=getchar();
while (read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p;
}
struct na{int y,ne;}b[MN<<],B[MN<<];
int n,m,q,l[MN],num=,fa[MN],lo[MN],df[MN],F[MN][],de[MN],x,y,z,nm=,st[MN],top=,SSS=,L[MN],NUM=,ID=;
inline int min(int a,int b){return a<b?a:b;}
inline void in(int x,int y){b[++num].y=y;b[num].ne=l[x];l[x]=num;}
inline void IN(int x,int y){B[++NUM].y=y;B[NUM].ne=L[x];L[x]=NUM;}
void dfs(int x,int f){
fa[x]=ID;
df[x]=lo[x]=++nm;
for (int i=l[x];i;i=b[i].ne)
if (b[i].y!=f){
if (!df[b[i].y]){
st[++top]=b[i].y;
dfs(b[i].y,x);
lo[x]=min(lo[x],lo[b[i].y]);
if (lo[b[i].y]==df[x]) for (++SSS,IN(x,SSS);top&&df[st[top]]>=df[b[i].y];top--) IN(SSS,st[top]);
else if (lo[b[i].y]>df[x]) IN(x,b[i].y),top--;
}else lo[x]=min(lo[x],df[b[i].y]);
}
}
void work(int x){
df[x]=;
for (int i=;i<;i++) F[x][i]=F[F[x][i-]][i-];
for (int i=L[x];i;i=B[i].ne) de[B[i].y]=de[x]+,F[B[i].y][]=x,work(B[i].y);
}
inline int lca(int x,int y){
if (de[x]>de[y]) swap(x,y);
for (int i=;i>=;i--)
if (de[F[y][i]]>=de[x]) y=F[y][i];
if (x==y) return x;
for (int i=;i>=;i--)
if (F[x][i]!=F[y][i]) x=F[x][i],y=F[y][i];
return F[x][];
}
int main(){
n=read();m=read();q=read();SSS=n;
for (int i=;i<=m;i++) x=read(),y=read(),in(x,y),in(y,x);
for (int i=;i<=n;i++) if (!df[i]) ++ID,dfs(i,);
for (int i=;i<=n;i++) if (df[i]) de[i]=,work(i);
while(q--){
x=read();y=read();z=read();
if (fa[x]!=fa[z]||fa[y]!=fa[z])puts("NO");else
m=lca(x,y)^lca(y,z)^lca(x,z),puts(((m>n&&(m==F[z][]||F[m][]==z))||m==z)?"YES":"NO");
}
}
hackerrank [Week of Code 33] Bonnie and Clyde的更多相关文章
- SGU 531. Bonnie and Clyde 线段树
531. Bonnie and Clyde 题目连接: http://acm.sgu.ru/problem.php?contest=0&problem=531 Description Bonn ...
- SGU 531 - Bonnie and Clyde 预处理+二分
Bonnie and Clyde Description Bonnie and Clyde are into robbing banks. This time their target is a to ...
- HackerRank Week of Code 26
好像这次week of code不是很难= = A int main(){ int n; int m; cin >> n >> m; cout<<(n+)/*)/) ...
- 【HackerRank Week of Code 31】Colliding Circles
https://www.hackerrank.com/contests/w31/challenges/colliding-circles/problem 设E(n)为序列长度为n时的期望值. \[ \ ...
- hackerrank Week of Code 31
https://www.hackerrank.com/contests/w31/challenges Beautiful Word 模拟 Accurate Sorting 检查每个数字距离原位是否都不 ...
- 【hackerrank week of code 26】Hard Homework
[题目链接]:https://www.hackerrank.com/contests/w26/challenges/hard-homework/problem [题意] 给你一个式子:sin(x)+s ...
- 【枚举约数】HackerRank - Week of Code 26 - Satisfactory Pairs
题意:给你一个正整数n,问你存在多少个正整数对a,b(a<b),满足条件:存在正整数x,y,使得ax+by=n. 就预处理出n以内所有数的约数,然后暴力枚举a,暴力枚举x,然后枚举n-ax的所有 ...
- Hackerrank: Week of Code 36
Cut a Strip 题目简述:给定$n \times m$的矩阵$a[][]$,要求选择一个$x \times 1(1 \leq x \leq k)$的(连续)子矩阵并清零后,找到最大和的(连续) ...
- Hadoop Exit Code 含义
经常遇到的exception是: 1. PipeMapRed.waitOutputThreads(): subprocess failed with code N ............ 2. T ...
随机推荐
- 【CSS3】动画
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Java 管程解决生产者消费者问题
同样是实验存档.//.. 依然以生产者消费者问题作为背景. 管程(=“资源管理程序”)将资源和对资源的操作封装起来,资源使用者通过接口操作资源就 ok,不用去考虑进程同步的问题. 管程: packag ...
- ArcGIS API for JavaScript 4.2学习笔记[31] (补充学习)Task类
Task这个东西很有用,是AJS中用于解决各种乱七八糟任务的一个类.它有很多子类,有用于空间分析的,有用于空间查询的,等等. 这篇作为补充学习的第一篇,也是进阶学习的第一篇,我就改个写法. 我将使用思 ...
- ORACLE的锁机制
数据库是一个多用户使用的共享资源.当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况.若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性. 加锁是实现数据 ...
- 使用 PyCharm 添加 第三方 依赖库
背景 最近开始搞python, 需要帮助算法同事一起调试程序,在本地安装python以后使用 pip 来安装第三方库. 但是算法同事一直使用的是PyCharm 这个IDE,所以需要与他一起调试的时候也 ...
- Linux整合Apache和SVN
1.安装APR-1.2.7和APR-util-1.2.7 (下载地址:http://apr.apache.org/) #tar zxvf apr-1.2.7.tar.gz #cd apr-1. ...
- linux大文件分包压缩和批量解压命令tar // tar 排除指定目录
压缩命令主要用到tar打包和split分割,命令如下: tar czf - aaa | split -b 1024m - bbb.tar.gz_ aaa可以是文件也可以是目录, 大小可以是b.k.m这 ...
- Sql 的 RAISERROR用法
http://www.yesky.com/imagesnew/software/tsql/ts_ra-rz_5ooi.htm RAISERROR 返回用户定义的错误信息并设系统标志,记录发生错误.通过 ...
- Keras 学习之旅(一)
软件环境(Windows): Visual Studio Anaconda CUDA MinGW-w64 conda install -c anaconda mingw libpython CNTK ...
- python科学计算_numpy_线性代数/掩码数组/内存映射数组
1. 线性代数 numpy对于多维数组的运算在默认情况下并不使用矩阵运算,进行矩阵运算可以通过matrix对象或者矩阵函数来进行: matrix对象由matrix类创建,其四则运算都默认采用矩阵运算, ...