先建一个$S$和$T$,$\forall 1\le i\le n$连边$(S,i)$和$(i,T)$,则最长路即为$S到T的最长路-2$

对于这张DAG,求出一个拓扑序,点$i$为第$i$个(特别的,$id_{S}=0$且$id_{T}=n+1$),根据拓扑序的性质,对于一条路径,其$id$必然单调递增

枚举删除的点$k$,再枚举$S$到$T$的最长路上$id$中$k$的前驱后继(由于$S$和$T$,因此必然存在,强制不等于$k$),记作$i$和$j$($i$到$j$要有边),则答案为$\max(ed_{i}+st_{j}+1)-2$(分别表示从$i$到$S$和从$j$到$T$的最长路,可以预处理)

暴力枚举复杂度仍然不行,考虑删除$k-1$和删除$k$的变化,可以看作以下3步:

1.$j$的枚举范围由$[k,n]$缩小为$[k+1,n]$,将$st_{k}$向之前的贡献删去

2.查询$k$上的答案,用一个set去维护

3.$i$的枚举范围由$[1,k-1]$扩大为$[1,k]$,将$ed_{k}$向之后的贡献加入

用一个set维护插入、删除和查询最大值(注意要可重,因此删除要删指针),由于每一条边最多在左端点插入一次、右端点删除一次,总复杂度为$o(m\log_{2}m)$

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 500005
4 multiset<int>s;
5 queue<int>q;
6 vector<int>v[N],vi[N];
7 int n,m,x,y,r[N],id[N],st[N],ed[N],ans[N];
8 void add(int x,int y){
9 r[y]++;
10 v[x].push_back(y);
11 vi[y].push_back(x);
12 }
13 void del(int k){
14 assert(s.find(k)!=s.end());
15 s.erase(s.find(k));
16 }
17 int main(){
18 scanf("%d%d",&n,&m);
19 for(int i=1;i<=m;i++){
20 scanf("%d%d",&x,&y);
21 add(x,y);
22 }
23 for(int i=1;i<=n;i++){
24 add(0,i);
25 add(i,n+1);
26 }
27 x=0;
28 q.push(0);
29 while (!q.empty()){
30 int k=q.front();
31 if ((1<=k)&&(k<=n))id[++x]=k;
32 q.pop();
33 for(int i=0;i<v[k].size();i++)
34 if (--r[v[k][i]]==0)q.push(v[k][i]);
35 }
36 for(int i=1;i<=n;i++)
37 for(int j=0;j<vi[id[i]].size();j++)ed[id[i]]=max(ed[id[i]],ed[vi[id[i]][j]]+1);
38 for(int i=n;i;i--)
39 for(int j=0;j<v[id[i]].size();j++)st[id[i]]=max(st[id[i]],st[v[id[i]][j]]+1);
40 for(int i=1;i<=n;i++)s.insert(st[i]-1);
41 for(int i=1;i<=n;i++){
42 for(int j=0;j<vi[id[i]].size();j++)del(ed[vi[id[i]][j]]+st[id[i]]-1);
43 if (!s.size())ans[i]=0;
44 else ans[i]=(*--s.end());
45 for(int j=0;j<v[id[i]].size();j++)s.insert(ed[id[i]]+st[v[id[i]][j]]-1);
46 }
47 ans[0]=ans[1];
48 for(int i=2;i<=n;i++)ans[0]=min(ans[0],ans[i]);
49 for(int i=1;i<=n;i++)
50 if (ans[i]==ans[0]){
51 printf("%d %d",id[i],ans[i]);
52 return 0;
53 }
54 }

[luogu3573]RAJ-Rally的更多相关文章

  1. ZOJ 3699 Dakar Rally

    Dakar Rally Time Limit: 2 Seconds      Memory Limit: 65536 KB Description The Dakar Rally is an annu ...

  2. 【BZOJ-3832】Rally 拓扑序 + 线段树 (神思路题!)

    3832: [Poi2014]Rally Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 168  Solved:  ...

  3. URAL 1227 Rally Championship(树的直径)(无向图判环)

    1227. Rally Championship Time limit: 1.0 secondMemory limit: 64 MB A high-level international rally ...

  4. 如何解决Rally模板提示angular js加载错误

    [前言] Rally是一个开源测试工具,用于测试openstack各个组件的性能 在使用Rally测试完毕后,一般会生成测试报告,这点很重要.但是原生态的Rally报告模板angular js框架是从 ...

  5. AtCoder Grand Contest 002 D - Stamp Rally

    Description We have an undirected graph with N vertices and M edges. The vertices are numbered 1 thr ...

  6. BZOJ3832[Poi2014]Rally——权值线段树+拓扑排序

    题目描述 An annual bicycle rally will soon begin in Byteburg. The bikers of Byteburg are natural long di ...

  7. 【BZOJ3832】[POI2014]Rally(拓扑排序,动态规划)

    [BZOJ3832][POI2014]Rally(拓扑排序,动态规划) 题面 BZOJ,权限题 洛谷 题解 这题好强啊,感觉学了好多东西似的. 首先发现了一个图画的很好的博客,戳这里 然后我来补充一下 ...

  8. 3832: [Poi2014]Rally

    3832: [Poi2014]Rally 链接 分析: 首先可以考虑删除掉一个点后,计算最长路. 设$f[i]$表示从起点到i的最长路,$g[i]$表示从i出发到终点的最长路.那么经过一条边的最长路就 ...

  9. Stamp Rally

    Stamp Rally 最大值最小,可以二分,然后并查集看能不能到z个点 但是询问过多,并且发现每次二分要加入的点并不是所有的m条边 于是就考虑整体二分 并查集的处理是重点: 对于一般的dfs分治树, ...

  10. OpenStack Benchmark - Rally

    作为以基于OpenStack的云平台的基准测试工具 -- Rally, 其功能不仅是测试云的性能&&稳定性, 还可以安装OpenStack,以及以良好的表现形式(web 页面)展现测试 ...

随机推荐

  1. CefSharp请求资源拦截及自定义处理

    CefSharp请求资源拦截及自定义处理 前言 在CefSharp中,我们不仅可以使用Chromium浏览器内核,还可以通过Cef暴露出来的各种Handler来实现我们自己的资源请求处理. 什么是资源 ...

  2. python爬虫时,解决编码方式问题的万能钥匙(uicode,utf8,gbk......)

    转载   原文:https://blog.csdn.net/xiongzaiabc/article/details/81008330 无论遇到的网页代码是何种编码方式,都可以用以下方法统一解决 imp ...

  3. 【Java虚拟机11】线程上下文类加载器

    前言 目前学习到的类加载的知识,都是基于[双亲委托机制]的.那么JDK难道就没有提供一种打破双亲委托机制的类加载机制吗? 答案是否定的. JDK为我们提供了一种打破双亲委托模型的机制:线程上下文类加载 ...

  4. 【Java虚拟机2】Java类加载机制

    前言 JAVA代码经过编译从源码变为字节码,字节码可以被JVM解读,使得JVM屏蔽了语言级别的限制.才有了现在的kotlin.Scala.Clojure.Groovy等语言. 字节码文件中描述了类的各 ...

  5. UltraSoft - Alpha - Scrum Meeting 2

    Date: Apr 09th, 2020. 会议内容为完成初步的任务分工. Scrum 情况汇报 进度情况 组员 负责 昨日进度 后两日任务 CookieLau PM.后端 继续Django tuto ...

  6. Java 将Word保存为WPS和WPT格式

    本文通过Java示例展示将Word文档(如.doc/.docx)保存为WPS和WPT格式的方法. 程序环境配置 IntelliJ IDEA 2018(jdk 1.8.0) Word Jar包:Spir ...

  7. 绘制PCB电路原理图的8种方法

    1.选择集成电路,变压器,晶体管等组件,这些组件体积庞大,有许多引脚并在电路中起主要作用,然后从选定的参考引脚中抽取,以减少错误. 2.如果PCB上标有元件编号(如VD870,R330,C466等), ...

  8. iPhone SE切换颜色特效

    Apple 网站的特效, iPhone SE 共有黑.白.红三种颜色,在卷动页面的时候会逐步替换,看起来效果非常时尚,在此供上代码学习. <!DOCTYPE html> <html& ...

  9. 攻防世界 杂项 5.wireshark-1

    题目描述: 黑客通过wireshark抓到管理员登陆网站的一段流量包(管理员的密码即是答案). flag提交形式为flag{XXXX} 看到登录应该想到它是HTTP POST请求,wireshark搜 ...

  10. 多线程--vthread

    vthread中包含两个类: vthread.vthread.pool vthread.vthread.thread 其中class pool的原型如下: class pool(builtins.ob ...