JZOJ 2114. 【GDKOI2011】反恐任务
\(\text{Problem}\)
给定一张无向图,\(q\) 次询问,删去一个点或一条相邻两点间的边,问两点是否连通
询问独立
\(\text{Solution}\)
明显的用圆方树把图变成树
然后问一棵树中删去一个点或一条边两点连不连通
只要讨论点双上的点与边,\(LCA\) 与割去点的位置关系即可
\(\text{Code}\)
#include <cstdio>
#include <iostream>
#include <cstring>
#define RE register
#define IN inline
using namespace std;
const int N = 2e5 + 5;
int n, m, q, cnt, tot1, tot2, top, dfc;
int h1[N], h2[N], dfn[N], low[N], fa[N][21], dep[N], siz[N], stk[N];
struct edge{int nxt, to;}e1[N * 5], e2[N * 5];
IN void add1(int x, int y){e1[++tot1] = edge{h1[x], y}, h1[x] = tot1;}
IN void add2(int x, int y){e2[++tot2] = edge{h2[x], y}, h2[x] = tot2;}
void Tarjan(int x)
{
stk[++top] = x, low[x] = dfn[x] = ++dfc;
for(RE int i = h1[x]; i; i = e1[i].nxt)
{
int v = e1[i].to;
if (!dfn[v])
{
Tarjan(v), low[x] = min(low[x], low[v]);
if (dfn[x] == low[v])
{
++cnt, add2(cnt, x), add2(x, cnt);
for(RE int u = 0; u != v; --top) u = stk[top], add2(cnt, u), add2(u, cnt);
}
}
else low[x] = min(low[x] , dfn[v]);
}
}
void Dfs(int x)
{
dfn[x] = ++dfc, siz[x] = 1;
for(RE int i = 1; i <= 18; i++)
if (fa[x][i - 1]) fa[x][i] = fa[fa[x][i - 1]][i - 1];
else break;
for(RE int i = h2[x]; i; i = e2[i].nxt)
{
int v = e2[i].to;
if (v == fa[x][0]) continue;
dep[v] = dep[x] + 1, fa[v][0] = x, Dfs(v), siz[x] += siz[v];
}
}
IN int LCA(int x, int y)
{
int u = x, v = y;
if (dep[u] < dep[v]) swap(u , v);
int deep = dep[u] - dep[v];
for(RE int i = 0; i <= 18; i++) if (deep & (1 << i)) u = fa[u][i];
if (u == v) return u;
for(RE int i = 18; i >= 0; i--)
if (fa[u][i] ^ fa[v][i]) u = fa[u][i], v = fa[v][i];
return fa[u][0];
}
int main()
{
scanf("%d%d", &n, &m);
for(RE int i = 1, x, y; i <= m; i++) scanf("%d%d", &x, &y), add1(x, y), add1(y, x);
cnt = n, Tarjan(1), dfc = 0, Dfs(1), scanf("%d", &q);
for(RE int op, x, y, u, v, flag, lca; q; q--)
{
scanf("%d%d%d%d", &op, &x, &y, &u), flag = 0;
if (op == 1)
{
scanf("%d", &v), lca = LCA(u, v);
if (dep[u] < dep[v]) swap(u, v);
if (lca != u && lca != v) flag = 1;
else if (siz[fa[u][0]] > siz[u] + 1) flag = 1;
else{
lca = LCA(x, y);
if (dfn[lca] >= dfn[u] && dfn[lca] <= dfn[u] + siz[u] - 1) flag = 1;
else if (!(dfn[x] >= dfn[u] && dfn[x] <= dfn[u] + siz[u] - 1) && !(dfn[y] >= dfn[u] && dfn[y] <= dfn[u] + siz[u] - 1))
flag = 1;
}
}
else{
lca = LCA(x, y);
if (lca == u);
else if (dfn[lca] > dfn[u] && dfn[lca] <= dfn[u] + siz[u] - 1) flag = 1;
else if (!(dfn[x] >= dfn[u] && dfn[x] <= dfn[u] + siz[u] - 1) && !(dfn[y] >= dfn[u] && dfn[y] <= dfn[u] + siz[u] - 1))
flag = 1;
}
if (flag) printf("yes\n"); else printf("no\n");
}
}
JZOJ 2114. 【GDKOI2011】反恐任务的更多相关文章
- HDU1243:反恐训练营
题目链接:反恐训练营 题意:本质上是求最大公共子序列,然后加上一个权值 分析:见代码 //公共子序列问题 //dp[i][j]表示前s1的前i个与s的前j个匹配得到的最大公共子序列 #include& ...
- 反恐训练营(LCS)
反恐训练营 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 反恐24小时第一季/全集24 Live Another Day迅雷下载
反恐24小时 第一至九季 24 Season 1-9 (2001-2014) 本季看点:<24小时>第8季将在拥有美国的象征自由女神像的纽约开始,在新的一天,CTU重新开张,新的领导为从M ...
- HDU 1243 反恐训练营(最长公共序列)
反恐训练营 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- HDU - 1243 - 反恐训练营
先上题目: 反恐训练营 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- HDU 1243 反恐训练营 (动态规划求最长公共子序列)
反恐训练营 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- hdu 1243 反恐训练营 最长公共字序列
此题的题意很明确,就是求最长公共子序列: #include<iostream> #include<algorithm> #include<cstdio> #incl ...
- hdu 1243 反恐训练营(dp 最大公共子序列变形)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1243 d[i][j] 代表第i 个字符与第 j 个字符的最大的得分.,, 最大公共子序列变形 #inclu ...
- 【HDOJ】1243 反恐训练营
LCS. /* 1243 */ #include <cstdio> #include <cstring> #include <cstdlib> #define MA ...
- 基础3.Jquery操作Dom
1 内部插入节点 <body> <ul id="city"> <li id="bj" name=&qu ...
随机推荐
- 用excel表画一个乐高
一.背景:在商场看到一个超级玛丽的乐高图感觉使用excel的颜色填充也能画出来,并且可以借助python来实现 二.excel表如何绘制正方形:1.统一设置行高与列宽excel表单元格的行与列的默认计 ...
- JavaEE Day13 Tomcat和Servlet
之前是web基础,现在是web核心 今日内容: web相关概念的回顾 开源的web服务器软件:Tomcat Servlet:整个web技术的核心[Servlet入门] 一.web相关概念的回顾 1.软 ...
- 输出图形字符的命令 banner
输出图形字符的命令 banner 有趣的 Linux 命令.来自实验楼操作系统课程 安装 sudo apt install sysvbanner 截图 其他 还有两个类似的命令toilet,figle ...
- 创建第一个WebService项目
前提: 保证联网的情况下创建webservice实例,需下载依赖jar 一.创建WebService服务端 1.创建服务端的工程 2.创建javaee的WebServices服务 3.命名server ...
- python 之异常捕获及处理(try--except)
在python中,至少有两类错误,一种是程序语法错误,一种是程序异常. 所谓的语法错误是指你未按规定格式书写导致的错误,如:定义函数时,括号后面要紧跟英文冒号,若缺失则不能识别与运行,并抛出 Synt ...
- JavaScript:对象:对象和属性的内存结构是什么样的?
在说变量的时候,大致画了变量的内存结构,现在来看一下对象的内存结构是什么样的,有助于我们理解传参的各种情况,只是大致的画一下内存模型,不代表实际内存情况. 我们可以用一段代码,来判断一下,是不是这样的 ...
- XCTF分站赛ACTF——Crypto
impossible RSA: 没啥好说的,跟我之前文章有道题类似,虽然如此还是花费了很长时间,原因令人落泪,把q = inverse(e,p)的数学式写成了eq mod p导致数学式推导及其困难(能 ...
- 一个简单的rust字符串时钟
1.简介 用rust写的一个简单的练手的demo,一个字符串时钟,在终端用字符串方式显示当前时间.本质是对图片取灰度,然后每个像素按灰度门限用星号代替灰度值,就把图片变为由星号组成的字符型图案.把 ...
- windows装机小经验
小白的装机之路 大学时有试过自己用硬盘装,但只知其然,不知其所以然,真出现什么问题也不知道怎么解决,作为一名码农还是好好补补知识,免得以后被人笑话. 经过自己的看各路大神文章,试验并总结以下粗浅见解. ...
- asp+vb.net解决调接口返回中文乱码问题
1.问题描述 涉及语言:vb,vbscript,vb.net,asp 最近在工作中碰到了这样一个问题:需要调用一个接口解析简历文件中的关键信息.直接用postman测试该接口,接口返回值没问题,但一旦 ...