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 ...
随机推荐
- DotNetCore跨平台~功能测试TestHost的使用
回到目录 之前写了关于自动化测试的相关文章,包括gitlab,unittest,jenkins pipeline等,基于都是功能点的测试,当我们的框架或者业务修改之后,需要走一篇自动化测试,以此来保证 ...
- (转)为Xcode添加删除行、复制行快捷键
转摘链接:http://www.jianshu.com/p/cc6e13365b7e 在使用eclipse过程中,特喜欢删除一行和复制一行的的快捷键.而恰巧Xcode不支持这两个快捷键,再一次的恰巧让 ...
- Linux下添加源的几种方法
sudo add-apt-repository xxxxxxx sudo gedit /etc/apt/sources.list然后把源粘贴进去,保存,最后shell输入sudo apt-get u ...
- 每周.NET前沿技术文章摘要(2017-06-21)
汇总国外.NET社区相关文章,覆盖.NET ,ASP.NET等内容: .NET .NET Core Magic: Develop on one OS, run on another 链接:https: ...
- MySQL 的调节和优化的提示
MySQL 服务器硬件和操作系统调节: 1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中——在内存中访问文件时的速度要比在硬盘中访问时快的多.2. 不惜一切代价避免使用Swap交换分区 – ...
- linux部署solr服务--小记
1.将solr压缩包上传到web项目-solr文件夹下 2.解压solr-5.5.4.zip到当前文件夹下 linux 解压zip文件到当前目录 unzip filename.zip 提示没有unzi ...
- 再谈javascript面向对象编程
前言:虽有陈皓<Javascript 面向对象编程>珠玉在前,但是我还是忍不住再画蛇添足的补上一篇文章,主要是因为javascript这门语言魅力.另外这篇文章是一篇入门文章,我也是才开始 ...
- 房上的猫:了解java与学习java前的准备
一.java 概述: 1.通常指完成某些事情的一种既定方式和过程 2.程序可以看做对一系列动作执行过程的描述 3.计算机按照某种顺序完成一系列指令的集合称为程序 4.计算机仅识别二进制低级语言 ...
- 《UNP》学习之TCP状态转换
CLOSED:TCP起始状态 LISTEN:绑定端口后进入listen状态,一般是服务端 SYN_SENT:发送SYN连接请求,主动打开连接的一方进入SYN_SENT SYN_RCVD:接收到SYN连 ...
- npm安装删除模块以及cnpm淘宝镜像
npm安装模块 [$ npm install xxx]利用 npm 安装xxx模块到当前命令行所在目录: [$ npm install -g xxx]利用npm安装全局模块xxx: npm 删除模块 ...