[luogu3573]RAJ-Rally
先建一个$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的更多相关文章
- ZOJ 3699 Dakar Rally
Dakar Rally Time Limit: 2 Seconds Memory Limit: 65536 KB Description The Dakar Rally is an annu ...
- 【BZOJ-3832】Rally 拓扑序 + 线段树 (神思路题!)
3832: [Poi2014]Rally Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 168 Solved: ...
- URAL 1227 Rally Championship(树的直径)(无向图判环)
1227. Rally Championship Time limit: 1.0 secondMemory limit: 64 MB A high-level international rally ...
- 如何解决Rally模板提示angular js加载错误
[前言] Rally是一个开源测试工具,用于测试openstack各个组件的性能 在使用Rally测试完毕后,一般会生成测试报告,这点很重要.但是原生态的Rally报告模板angular js框架是从 ...
- 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 ...
- BZOJ3832[Poi2014]Rally——权值线段树+拓扑排序
题目描述 An annual bicycle rally will soon begin in Byteburg. The bikers of Byteburg are natural long di ...
- 【BZOJ3832】[POI2014]Rally(拓扑排序,动态规划)
[BZOJ3832][POI2014]Rally(拓扑排序,动态规划) 题面 BZOJ,权限题 洛谷 题解 这题好强啊,感觉学了好多东西似的. 首先发现了一个图画的很好的博客,戳这里 然后我来补充一下 ...
- 3832: [Poi2014]Rally
3832: [Poi2014]Rally 链接 分析: 首先可以考虑删除掉一个点后,计算最长路. 设$f[i]$表示从起点到i的最长路,$g[i]$表示从i出发到终点的最长路.那么经过一条边的最长路就 ...
- Stamp Rally
Stamp Rally 最大值最小,可以二分,然后并查集看能不能到z个点 但是询问过多,并且发现每次二分要加入的点并不是所有的m条边 于是就考虑整体二分 并查集的处理是重点: 对于一般的dfs分治树, ...
- OpenStack Benchmark - Rally
作为以基于OpenStack的云平台的基准测试工具 -- Rally, 其功能不仅是测试云的性能&&稳定性, 还可以安装OpenStack,以及以良好的表现形式(web 页面)展现测试 ...
随机推荐
- Go语言核心36讲(Go语言基础知识一)--学习笔记
01 | 工作区和GOPATH 从 Go 1.5 版本的自举(即用 Go 语言编写程序来实现 Go 语言自身),到 Go 1.7 版本的极速 GC(也称垃圾回收器),再到 2018 年 2 月发布的 ...
- nginx访问权限问题
1.问题 server { listen 8011; server_name test.cn; location ~ \.php?.*$ { root /home/zhj/; #fastcgi_pas ...
- Geostatistical Analyst Tools(Geostatistical Analyst 工具)
Geostatistical Analyst 工具 1.使用地统计图层 # Process: GA 图层至格网 arcpy.GALayerToGrid_ga("", 输出表面栅格, ...
- macbook air m1上传文件到github
一,首先安装git,打开ssh文件里的id_rsa.pub,然后复制所有内容. 二,github上申请自己的账号,右上角settings里选择SSH and GPG keys,点击new ssh ke ...
- selenium3 利用cookie实现免登陆
1.首先访问要操作的页面 2.登陆一次,使用Fiddle等工具抓取出cookie 3.按照如下代码,即可成功登陆 from selenium import webdriver url = " ...
- 初始HTML05
HTML 表单控件属性 表单控件可设置以下标签属性 属性名 取值 type 设置控件类型 name 设置控件名称,最终与值一并发送给服务器 value 设置控件的值 placeholder 设置输入框 ...
- Vite启动后提示Network: use `--host` to expose
当使用 Vite 构建项目后,发现只有localhost + 端口 服务,没有 IP + 端口服务. 运行npm run dev,终端提示Vite启动后提示Network: use '--host' ...
- 极简实用的Asp.NetCore框架再新增商城模块
概述 关于这个框架的背景,在前面我已经交代过了.不清楚的可以查看这个链接 1.极简实用的Asp.NetCore模块化框架决定免费开源了 2.极简实用的Asp.NetCore模块化框架新增CMS模块 算 ...
- vs编译问题总结
编译遇到MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the ...
- C语言零基础入门难发愁,那就快来看看这篇基础整理资料吧
C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成.格式.以及良好的书写风格,使小伙伴对c语言有个初步认识. 例1:计算两个整数之和的c程序: #include main() { in ...