BZOJ 3832: [Poi2014]Rally
Sol
线段树+拓扑序.
先把图的拓扑序搞出来,然后统计从起点到该点最长链,从该点到终点的最长链,然后建个起点终点,这里跟网络流很像,把它统一到一个有起点的图中,这里也要注意下细节处理.S,T的一个边割掉后最长链就是答案.
然后一开始所有点都在T的集合中,一个个将点加入S集合,用线段树维护每个节点 (从起点到该点最长链+从终点到该点的最长链)的长度,其实就是一个权值线段树,然后就是加加减减的...
Code
/**************************************************************
Problem: 3832
User: BeiYu
Language: C++
Result: Accepted
Time:13472 ms
Memory:65804 kb
****************************************************************/ #include<cstdio>
#include<vector>
#include<queue>
#include<iostream>
using namespace std; const int N = 500050;
#define debug(a) cout<<#a<<"="<<a<<endl inline int in(int x=0,char ch=getchar()){ while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; } int n,m,l,r,s,t;int du[N],q[N],f[N][2];
vector<int> g[N],h[N];
int ans1,ans2; #define mid ((l+r)>>1)
#define lc (o<<1)
#define rc (o<<1|1) int d[N<<2],ma[N<<2];
void Add(int x,int v,int o=1,int l=0,int r=n+2){
if(l==r){ d[o]+=v;return; }
if(x<=mid) Add(x,v,lc,l,mid);
else Add(x,v,rc,mid+1,r);
d[o]=d[lc]+d[rc];
}
int Query(int o=1,int l=0,int r=n+2){
if(l==r) return l;
if(d[rc]>0) return Query(rc,mid+1,r);
else return Query(lc,l,mid);
} #undef mid
#undef lc
#undef rc int main(){
// freopen("in.in","r",stdin);
n=in(),m=in();
for(int i=1,u,v;i<=m;i++){
u=in(),v=in(),du[v]++;
g[u].push_back(v),h[v].push_back(u);
}
for(int i=1;i<=n;i++) if(!du[i]) q[r++]=i;
int cnt=r;
for(int x;l<r;){
x=q[l++];
for(int i=0,lim=g[x].size();i<lim;i++) if(!--du[g[x][i]]) q[r++]=g[x][i];
}for(int i=0;i<n;i++){
for(int j=0,u=q[i],lim=h[u].size();j<lim;j++)
f[u][0]=max(f[u][0],f[h[u][j]][0]+1);
for(int j=0,u=q[r-i-1],lim=g[u].size();j<lim;j++)
f[u][1]=max(f[u][1],f[g[u][j]][1]+1);
} // for(int i=0;i<cnt;i++) Add(f[q[i]][1],1);
// debug(cnt);
// debug(Query()); s=n+1,t=s+1;
for(int i=1;i<=n;i++){
g[s].push_back(i),h[i].push_back(s);
g[i].push_back(t),h[t].push_back(i);
Add(f[i][1],1);
}
f[s][0]=-1,f[t][1]=-1;
ans2=n+2; // for(int i=1;i<=t;i++) printf("%d %d\n",f[i][0],f[i][1]); for(int i=0;i<n;i++){
int u=q[i];
for(int j=0,lim=h[u].size();j<lim;j++)
Add(f[h[u][j]][0]+f[u][1]+1,-1);
int tmp=Query();
if(tmp<ans2) ans2=tmp,ans1=u;
for(int j=0,lim=g[u].size();j<lim;j++)
Add(f[g[u][j]][1]+f[u][0]+1,1);
}return printf("%d %d\n",ans1,ans2);
}
BZOJ 3832: [Poi2014]Rally的更多相关文章
- 3832: [Poi2014]Rally
3832: [Poi2014]Rally 链接 分析: 首先可以考虑删除掉一个点后,计算最长路. 设$f[i]$表示从起点到i的最长路,$g[i]$表示从i出发到终点的最长路.那么经过一条边的最长路就 ...
- 【BZOJ】3832: [Poi2014]Rally
题意 \(n(2 \le n \le 500000)\)个点\(m(1 \le m \le 1000000)\)条边的有向无环图,找到一个点,使得删掉这个点后剩余图中的最长路径最短. 分析 神题不会做 ...
- BZOJ:3832: [Poi2014]Rally
题意: 给出$DAG$,询问删掉哪个点之后最长路径最短 思路: 我们令$f[x]$表示从最远的点到达它的距离,$g[x]$表示它能够到达最远的点的距离 那么对于$(x -> y)$一条边来说,它 ...
- 【BZOJ3832】[POI2014]Rally(拓扑排序,动态规划)
[BZOJ3832][POI2014]Rally(拓扑排序,动态规划) 题面 BZOJ,权限题 洛谷 题解 这题好强啊,感觉学了好多东西似的. 首先发现了一个图画的很好的博客,戳这里 然后我来补充一下 ...
- 【刷题】BZOJ 4543 [POI2014]Hotel加强版
Description 同OJ3522 数据范围:n<=100000 Solution dp的设计见[刷题]BZOJ 3522 [Poi2014]Hotel 然后发现dp的第二维与深度有关,于是 ...
- 主席树||可持久化线段树||BZOJ 3524: [Poi2014]Couriers||BZOJ 2223: [Coci 2009]PATULJCI||Luogu P3567 [POI2014]KUR-Couriers
题目:[POI2014]KUR-Couriers 题解: 要求出现次数大于(R-L+1)/2的数,这样的数最多只有一个.我们对序列做主席树,每个节点记录出现的次数和(sum).(这里忽略版本差值问题) ...
- BZOJ 3524: [Poi2014]Couriers [主席树]
3524: [Poi2014]Couriers Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1892 Solved: 683[Submit][St ...
- BZOJ 3524: [Poi2014]Couriers
3524: [Poi2014]Couriers Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1905 Solved: 691[Submit][St ...
- Bzoj 3831 [Poi2014]Little Bird
3831: [Poi2014]Little Bird Time Limit: 20 Sec Memory Limit: 128 MB Submit: 310 Solved: 186 [Submit][ ...
随机推荐
- linux中快速清空文件内容的几种方法
这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的朋友可以参考下 $ : > filename $ > filename $ echo "" > f ...
- YOURPHP的分页完整版
html代码 <?php print_r($ser['searchtype']);?> <select name="searchtype"> <opt ...
- memcache相同主域名下的session共享
本配置适合具有相同主域名的多台服务器进行session共享. 例如:www.lee.com , bbs.lee.com(多个子域名). 配置session保存在memcache: ini_set(&q ...
- Spring中加载xml配置文件的六种方式
Spring中加载xml配置文件的六种方式 博客分类: Spring&EJB XMLSpringWebBeanBlog 因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装 ...
- Java中hashCode的作用
转 http://blog.csdn.net/fenglibing/article/details/8905007 Java中hashCode的作用 2013-05-09 13:54 64351人阅 ...
- MongoVUE
MongoVUE运行界面如下:
- Orchard源码分析(4.1):Orchard.Environment.CollectionOrderModule类
CollectionOrderModule类是一个Autofac模块(Module,将一系列组件和相关的功能包装在一起),而非Orchard模块.其作用是保证多个注册到容器的组件能按FIFO(Firs ...
- 使用 Ant 自动生成项目构建版本
引言 对 于多版本项目,要提供新版本来跟上新功能或缺陷报告增加的速度,并同时仍然保持可接受的质量水平,可能是一项不小的挑战.构建自动化可确保准确性和消除人 为错误的可能性,从而部分地解决此问题.自动化 ...
- C#~异步编程续~.net4.5主推的await&async应用(转)
之前写过两篇关于异步编程的文章,详细可以进入C#~异步编程和C#~异步编程在项目中的使用 .net的各个版本都有自己主推的技术,像.NET1.1中的委托,.NET2.0中的泛型,.NET3.0中的Li ...
- 全屏背景:15个jQuery插件实现全屏背景图像或媒体
动态网站通常利用背景图像或预加载屏幕,以保证所有资源都加载到页面上,在浏览器中充分呈现.现在很多网站都炫耀自己的图像作为背景图像全屏背景,追溯到旧的Flash网站却用自己的方式在HTML资源重布局. ...