[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 ...
随机推荐
- 从零搭建基于webpack的Electron-Vue3项目(1)——基于webpack的Vue3项目搭建
从零搭建基于webpack的Electron-Vue3项目(1)--基于webpack的Vue3项目搭建 前言 本篇文章内容,主要是基于webpack的Vue3项目开发环境进行搭建,暂时还不涉及到El ...
- PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力
飞桨 (PaddlePaddle) 以百度多年的深度学习技术研究和业务应用为基础,是中国首个自主研发.功能完备. 开源开放的产业级深度学习平台,集深度学习核心训练和推理框架.基础模型库.端到端开发 ...
- InstallSheild相关
一.关于使用InstallSheild制作安装包的总结. 1.定制化制作需要了解InstallScript语法,相关资料可以去网上查找,后续提供比较好的资料. 2.有些软件运行是需要一些环境的,譬如使 ...
- hdu4479 (数学题)(算术基本定理)
题目大意 给定一个三元组\((x,y,z)\)的\(gcd\)和\(lcm\),求可能的三元组的数量是多少,其中三元组是的具有顺序的 其中\(gcd\)和\(lcm\)都是32位整数范围之内 由算术基 ...
- 【学习转载】MyBatis源码解析——日志记录
声明:转载自前辈:开心的鱼a1 一 .概述 MyBatis没有提供日志的实现类,需要接入第三方的日志组件,但第三方日志组件都有各自的Log级别,且各不相同,但MyBatis统一提供了trace.deb ...
- yum源安装nginx
nginx使用yum源安装 安装步骤 使用yum源安装依赖 yum install yum-utils 配置nginx.repo的yum文件 vim /etc/yum.repos.d/nginx.re ...
- vue基本指令与脚手架基本配置
脚手架(@vue/cli)创建项目启动服务 1.创建项目 vue create 项目名字 2.启动项目 进入项目根目录,运行以下命令 yarn serve 3.脚手架目录代码分析 ├── node_m ...
- 乘风破浪,遇见最美Windows 11之新微软商店(Microsoft Store)生态 - 安卓(Android™)开发体验指南
什么是Windows 11的安卓(Android)应用 2021年6月25日,微软召开线上发布会,对外宣告下一代Windows操作系统Windows 11,Windows 11为用户重新打造的Micr ...
- 移动端 h5 uniapp 读,写,删本地文件或sd文件
移动端 h5 uniapp 读,写,删本地文件或sd文件 应用场景: 当我们需要做离线应用或者是加载本地文件时使用到此方法.(本篇文章给大家分享访问app私有文件目录,系统公共目录,sd外置存储的文件 ...
- Mac 系统如何利用软链接在根目录创建文件夹?
作者:泥瓦匠 出处:https://www.bysocket.com/2021-10-26/mac-create-files-from-the-root-directory.html Mac 操作系统 ...