题意

题目链接

Sol

最直观的思路是求出删除每个点后的最长路,我们考虑这玩意儿怎么求

设\(f[i]\)表示以\(i\)结尾的最长路长度,\(g[i]\)表示以\(i\)开始的最长路长度

根据DAG的性质,显然我们删除一个点后,整个集合会被分成两部分:拓扑序小于/大于当前点

那么此时的最长路一定可以通过计算连接着两个集合的边\((u, v)\)的\(f(u) + f(v) +1\)得到

这样的话我们可以直接维护边集,在统计每个点的答案的时候首先删掉入边的贡献统计答案,统计完后再加入出边的贡献

显然线段树可以维护,其实堆也可以维护,具体见代码(抄袭自yyb大佬)

#include<bits/stdc++.h>
#define chmax(x, y) (x = (x > y ? x : y))
#define chmin(x, y) (x = (x < y ? x : y))
using namespace std;
const int MAXN = 1e6 + 10, INF = 1e9 + 10;
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int N, M, a1 = INF, a2;
class MyPriorityQueue {public: priority_queue<int> q1, q2;void push(int x) {q1.push(x);}int pop(int x) {q2.push(x);}bool empty() {while(!q2.empty() && (q1.top() == q2.top())) q1.pop(), q2.pop();return q1.size() == 0;}int top() {return empty() ? INF : q1.top();}
};
MyPriorityQueue Q;
struct Graph {vector<int> v[MAXN];int f[MAXN], inder[MAXN], id[MAXN], tot;Graph() {tot = 0;}void AddEdge(int x, int y) {v[x].push_back(y); inder[y]++;}void Topsort() {queue<int> q;for(int i = 1; i <= N; i++) if(!inder[i]) q.push(i);while(!q.empty()) {int p = q.front(); q.pop(); id[++tot] = p;for(int i = 0; i < v[p].size(); i++) {int to = v[p][i]; chmax(f[to], f[p] + 1);if(!(--inder[to])) q.push(to);}}}
};
Graph Gs, Gt;
int main() {N = read(); M = read();for(int i = 1; i <= M; i++) {int x = read(), y = read();Gs.AddEdge(x, y); Gt.AddEdge(y, x);}Gs.Topsort(); Gt.Topsort();for(int i = 1; i <= N; i++) Q.push(Gt.f[i]);for(int t = 1; t <= N; t++) {int x = Gs.id[t]; Q.pop(Gt.f[x]);for(int i = 0; i < Gt.v[x].size(); i++) {int to = Gt.v[x][i];Q.pop(Gs.f[to] + Gt.f[x] + 1);}int now = Q.top(); Q.push(Gs.f[x]);if(now < a1) a1 = now, a2 = x;for(int i = 0; i < Gs.v[x].size(); i++) {int to = Gs.v[x][i];Q.push(Gs.f[x] + Gt.f[to] + 1);}}printf("%d %d\n", a2, a1);return 0;
}

BZOJ3832: [Poi2014]Rally(拓扑排序 堆)相关推荐

  1. [BZOJ3832][Poi2014]Rally

    [BZOJ3832][Poi2014]Rally 试题描述 An annual bicycle rally will soon begin in Byteburg. The bikers of Byt ...

  2. BZOJ3832 [Poi2014]Rally 【拓扑序 + 堆】

    题目链接 BZOJ3832 题解 神思路orz,根本不会做 设\(f[i]\)为到\(i\)的最长路,\(g[i]\)为\(i\)出发的最长路,二者可以拓扑序后\(dp\)求得 那么一条边\((u,v ...

  3. bzoj 2535: [Noi2010]Plane 航空管制2【拓扑排序+堆】

    有个容易混的概念就是第一问的答案不是k[i]字典序最小即可,是要求k[i]大的尽量靠后,因为这里前面选的时候是对后面有影响的(比如两条链a->b c->d,ka=4,kb=2,kc=3,k ...

  4. 【拓扑排序】【堆】CH Round #57 - Story of the OI Class 查错

    拓扑排序,要让字典序最小,所以把栈改成堆. 1 #include<cstdio> 2 #include<queue> 3 #include<algorithm> 4 ...

  5. [NOIP2017]逛公园 最短路+拓扑排序+dp

    题目描述 给出一张 $n$ 个点 $m$ 条边的有向图,边权为非负整数.求满足路径长度小于等于 $1$ 到 $n$ 最短路 $+k$ 的 $1$ 到 $n$ 的路径条数模 $p$ ,如果有无数条则输出 ...

  6. 算法提高课-图论-单源最短路的综合应用-AcWing 342. 道路与航线:最短路dijkstra、拓扑排序 、综合题、好题

    题目分析 来源:acwing 分析: 道路:双向,边权非负, 航线:单向,边权可正可负,且无环. 根据题意,点可以分为很多团(连通块),团内部只有道路(道路是双向的,而且是连通的,所以不能存在航线,否 ...

  7. 【数据结构】图的应用(普利姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法、拓扑排序)

    最小生成树 什么是最小生成树 是一棵树 - 无回路 - |V|个顶点一定有|V|-1条边 是生成树 - 包含全部顶点 - |V|-1条边全在图里 贪心算法 什么是"贪":每一步都要 ...

  8. Problem G. Graph 2015-2016 acmicpc neerc 拓扑排序模拟

    一道好题 题目详见题目连接G graph 显然模拟拓扑排序的步骤是必不可少了. 假设我们当前有t个点,他们的入度均为0.我们不知道该选取哪一个. 我们把这t个点按从小到大排好序(放入小顶堆),假设我们 ...

  9. 「BZOJ2200」[Usaco2011 Jan] 道路和航线 - 最短路+拓扑排序

    ->点我进原题 [Usaco2011 Jan]道路和航线 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 1116 Solved: 410 Des ...

最新文章

  1. python【数据结构与算法】贝祖定理简单讲解
  2. conda pip安装在哪里_TensorFlow 2.0 安装指南
  3. Windows Mobile,用C#更改网络连接(SSID、IP Address、Subnet Mask、Gatew... (转)
  4. 论文评析-Gradient Boosting Neural Networks: GrowNet,Preprint, 2021和Gradient boosting原理介绍
  5. asp.net执行js出现“已终止操作”的解决方法
  6. 剑指Offer_16_合并两个排序的链表
  7. 小米 12S Utra 莱卡水印生成在线工具
  8. 坚持学习100天:象棋网上对弈系统(表示看不懂,有待加油)
  9. 股票量化分析工具QTYX使用攻略——北上资金持仓选股(更新2.5.8)
  10. splits——安卓gradle
  11. python基础语法和变量
  12. 这几个习惯,让我成为了高阶网络工程师。
  13. android 点赞手型,在朋友圈,你是哪种点赞型人格?
  14. HYSBZ 2565 最长双回文串
  15. GWT(Google Web Toolkit)初体验
  16. java上溯造型与下溯造型
  17. 医疗卫生信息化数据防泄漏保护系统解决方案
  18. osg的geographic和geodetic
  19. <polymorphism>
  20. 写在2017展望与回顾

热门文章

  1. python k线顶分型_顶分型底分型代码
  2. 《与爱因斯坦月球漫步——美国记忆力冠军教你记忆一切》读书摘抄[美]乔舒亚.福尔
  3. bootstrap-suggest插件处理复杂对象时的解决方案
  4. 音乐u盘排序软件_传输数据快速的各种U盘系列 定制U盘
  5. 后端根据百度地图真实路径距离_做地图功能的设计,有哪些容易被我们忽略的思考?...
  6. 群晖 root_群晖洗白简单教程
  7. PowerDesigner16.5汉化破解版安装教程(含安装文件、汉化包、破解文件)
  8. c语言上机实验作业答案,第十二次C语言上机实验参考答案
  9. 六部工坊ros启智机器人定点导航技术_【展品抢鲜看】程天科技外骨骼机器人亮相峰会,让每个人享受机器人的服务!...
  10. android view 存值,使用ViewModel保存数据