[noi706]Sabotage
先可以将所有出度为0的节点连向一个点,然后问题变为求到这个点的必经之点
这其实是一道模板题,因为有一个东西叫做支配树
容易发现一个点的必经之点都是一条链,其实可以把这条链上最浅的点作为这个点的父亲,那么一个点的所有必经之点显然就是他到根的路径上的点
具体来说,这个点的父亲就是他所有联通的点的lca(不能叫lca,可以用拓扑来求)
最终支配树上所询问两个点的lca深度就是答案

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 queue<int>q;
5 vector<int>a[N],b[N];
6 int n,m,x,y,vis[N],sh[N],f[N][21];
7 int lca(int x,int y){
8 if (sh[x]<sh[y])swap(x,y);
9 for(int i=20;i>=0;i--)
10 if (sh[x]-(1<<i)>=sh[y])x=f[x][i];
11 if (x==y)return x;
12 for(int i=20;i>=0;i--)
13 if (f[x][i]!=f[y][i]){
14 x=f[x][i];
15 y=f[y][i];
16 }
17 return f[x][0];
18 }
19 int main(){
20 scanf("%d%d",&n,&m);
21 for(int i=1;i<=m;i++){
22 scanf("%d%d",&x,&y);
23 a[x].push_back(y);
24 b[y].push_back(x);
25 vis[x]++;
26 }
27 for(int i=1;i<=n;i++)
28 if (!vis[i])q.push(i);
29 while (!q.empty()){
30 int k=q.front();
31 q.pop();
32 int v=0;
33 if (a[k].size()){
34 v=a[k][0];
35 for(int i=1;i<a[k].size();i++)v=lca(v,a[k][i]);
36 }
37 sh[k]=sh[v]+1;
38 f[k][0]=v;
39 for(int i=1;i<=20;i++)f[k][i]=f[f[k][i-1]][i-1];
40 for(int i=0;i<b[k].size();i++)
41 if (--vis[b[k][i]]==0)q.push(b[k][i]);
42 }
43 scanf("%d",&m);
44 for(int i=1;i<=m;i++){
45 scanf("%d%d",&x,&y);
46 printf("%d\n",sh[lca(x,y)]);
47 }
48 }
[noi706]Sabotage的更多相关文章
- USACO翻译:USACO 2014 MARCH GOLD P2 Sabotage
1.破坏{DOLD题2} sabotage.pas/c/cpp [问题描述] 农夫约翰的头号敌人保罗决定破坏农民约翰的挤奶设备.挤奶设备排成一行,共N(3<= N <=100000)台挤奶 ...
- BZOJ 3477: [Usaco2014 Mar]Sabotage( 二分答案 )
先二分答案m, 然后对于原序列 A[i] = A[i] - m, 然后O(n)找最大连续子序列和, 那么此时序列由 L + mx + R组成. L + mx + R = sum - n * m, s ...
- UVA 10480 Sabotage (网络流,最大流,最小割)
UVA 10480 Sabotage (网络流,最大流,最小割) Description The regime of a small but wealthy dictatorship has been ...
- 洛谷2115 [USACO14MAR]破坏Sabotage
https://www.luogu.org/problem/show?pid=2115 题目描述 Farmer John's arch-nemesis, Farmer Paul, has decide ...
- UVA10480:Sabotage(最小割+输出)
Sabotage 题目链接:https://vjudge.net/problem/UVA-10480 Description: The regime of a small but wealthy di ...
- [USACO14MAR]破坏Sabotage 二分答案
题目描述 Farmer John's arch-nemesis, Farmer Paul, has decided to sabotage Farmer John's milking equipmen ...
- 【二分 贪心】bzoj3477: [Usaco2014 Mar]Sabotage
科学二分姿势 Description Farmer John's arch-nemesis, Farmer Paul, has decided to sabotage Farmer John's mi ...
- [Usaco2014 Mar]Sabotage
[Usaco2014 Mar]Sabotage 题目 Farmer John"s arch-nemesis, Farmer Paul, has decided to sabotage Far ...
- 洛谷P2115 [USACO14MAR]破坏Sabotage
题目描述 Farmer John's arch-nemesis, Farmer Paul, has decided to sabotage Farmer John's milking equipmen ...
随机推荐
- MacOS下Java与JDK关系与相关路径
MacOS下Java与JDK关系与相关路径 macOS下的Java与JDK的路径曾经困扰过我一段时间,今天稍有些忘记,故记下笔记,整理一下.Java与JDK的关系不在本文笔记之内,Javaer常识. ...
- Linear Referencing Tools(线性参考工具)
线性参考工具 # Process: 创建路径 arcpy.CreateRoutes_lr("", "", 输出路径要素类, "LENGTH" ...
- python-docx处理Word必备工具
我的理解 为什么会用到python-docx,因为近段时间下载了大量网文,但格式都是html的,我个人习惯使用word处理文字,于是就想法设法把html文档转换为word,首先要考虑的问题就是从h ...
- 【c++ Prime 学习笔记】第7章 类
类的基本思想是数据抽象和封装 数据分离抽象是一种依赖于接口和实现分离的编程/设计技术.接口包括用户能执行的操作,实现包括类的数据成员.接口实现的函数体.定义类所需的各种私有函数 封装实现了类的接口和实 ...
- Scrum Meeting 10
第10次例会报告 日期:2021年05月30日 会议主要内容概述: 目前组员均无暇软工,进展较慢. 一.进度情况 我们采用日报的形式记录每个人的具体进度,链接Home · Wiki,如下记录仅为保证公 ...
- BUAA2020软工作业(三)——个人项目
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人项目作业 我在这个课程的目标是 进一步提高自己的编码能力,工程能力 这个作业在哪个具体方面帮助 ...
- pyinstaller和wordcloud和jieba的使用案列
一.pyinstaller库 1.简介 pyinstaller库:将脚本程序转变为可执行(.exe)格式的第三方库 注意:需要在.py文件所在目录进行以下命令,图标扩展名是.ico 2.格式: pyi ...
- 关于评论区empty。。。
空荡荡的毫无人烟,博主希望路过的小哥哥/小姐姐(几率较小)留下些什么--
- MyBatis源码分析(四):SQL执行过程分析
一.获取Mapper接口的代理 根据上一节,Mybatis初始化之后,利用sqlSession(defaultSqlSession)的getMapper方法获取Mapper接口 1 @Override ...
- CSP-S 2021 爆零记
前言 本人今年高二蒟蒻OIer,高一刚刚接触OI. 感觉可能要直接退役了555~ 希望还有机会靠NOIP翻盘 Day - 暑假 为了备战CSP提前返校,与xzh一起划水,总之刷了不少题,我也大受震撼 ...