先可以将所有出度为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的更多相关文章

  1. USACO翻译:USACO 2014 MARCH GOLD P2 Sabotage

    1.破坏{DOLD题2} sabotage.pas/c/cpp [问题描述] 农夫约翰的头号敌人保罗决定破坏农民约翰的挤奶设备.挤奶设备排成一行,共N(3<= N <=100000)台挤奶 ...

  2. BZOJ 3477: [Usaco2014 Mar]Sabotage( 二分答案 )

    先二分答案m, 然后对于原序列 A[i] = A[i] - m,  然后O(n)找最大连续子序列和, 那么此时序列由 L + mx + R组成. L + mx + R = sum - n * m, s ...

  3. UVA 10480 Sabotage (网络流,最大流,最小割)

    UVA 10480 Sabotage (网络流,最大流,最小割) Description The regime of a small but wealthy dictatorship has been ...

  4. 洛谷2115 [USACO14MAR]破坏Sabotage

    https://www.luogu.org/problem/show?pid=2115 题目描述 Farmer John's arch-nemesis, Farmer Paul, has decide ...

  5. UVA10480:Sabotage(最小割+输出)

    Sabotage 题目链接:https://vjudge.net/problem/UVA-10480 Description: The regime of a small but wealthy di ...

  6. [USACO14MAR]破坏Sabotage 二分答案

    题目描述 Farmer John's arch-nemesis, Farmer Paul, has decided to sabotage Farmer John's milking equipmen ...

  7. 【二分 贪心】bzoj3477: [Usaco2014 Mar]Sabotage

    科学二分姿势 Description Farmer John's arch-nemesis, Farmer Paul, has decided to sabotage Farmer John's mi ...

  8. [Usaco2014 Mar]Sabotage

    [Usaco2014 Mar]Sabotage 题目 Farmer John"s arch-nemesis, Farmer Paul, has decided to sabotage Far ...

  9. 洛谷P2115 [USACO14MAR]破坏Sabotage

    题目描述 Farmer John's arch-nemesis, Farmer Paul, has decided to sabotage Farmer John's milking equipmen ...

随机推荐

  1. 鲲鹏展翅|SphereEx 获华为鲲鹏技术认证

    SphereEx Data Middleware 通过了华为鲲鹏技术认证并加入鲲鹏展翅伙伴计划,未来 SphereEx Data Middleware 产品将继续以分布式能力为基础,以数据安全.分布式 ...

  2. 使用Python写词云数据可视化

    词云的应用场景 会议记录 海报制作 PPT制作 生日表白 数据挖掘 情感分析 用户画像 微信聊天记录分析 微博情感分析 Bilibili弹幕情感分析 年终总结 安装本课程所需的Python第三方模块 ...

  3. 2021.5.22 vj补题

    A - Marks CodeForces - 152A 题意:给出一个学生人数n,每个学生的m个学科成绩(成绩从1到9)没有空格排列给出.在每科中都有成绩最好的人或者并列,求出最好成绩的人数 思路:求 ...

  4. C#开发BIMFACE系列52 CS客户端集成BIMFACE应用的技术方案

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<C#开发BIMFACE系列49 Web网页集成BIMFACE应用的技术方案>.<C#开发BI ...

  5. 以太坊web3开发初步学习

    以太坊web3开发初步学习 此文是对https://learnblockchain.cn/2018/04/15/web3-html/的学习再理解. 以太坊智能合约通过使用web3.js前端和智能合约交 ...

  6. UnboundLocalError: local variable 'range' referenced before assignment

    1. 报错信息 UnboundLocalError: local variable 'range' referenced before assignment 2. 代码 class Car(): &q ...

  7. Java:死锁编码及定位分析

    Java:死锁编码及定位分析 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 概念 死锁是指两个或多个以上的进程在执行过程中,因争夺资源而造成一种互相等待的现象, ...

  8. win10安装git fatal: open /dev/null or dup failed: No such file or directory错误解决方法

    原因看大家意思应该是 非即插即用驱动文件null.sys问题. 网上有很多方案.最后试了一个可行的. 替换  windows/system32/drivers/null.sys为网盘中的文件即可. 链 ...

  9. Beta-功能规格说明书

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-计划-功能规格说明书 一.引言 1. 项目简介 项目团队:删库跑路对不队 项目名称:题士 项目内容 ...

  10. vs2010中release模式下调试程序

    debug模式调试信息全,但是速度很慢,在数据量比较大的时候非常影响调试效率,release模式速度快,但是没有调试信息.所以在编译的时候很多编译器会提供一种折中的编译方式,在release下提供调试 ...