f[0][i]为i出发的最长路,f[1][i]为到i的最长路

新建源汇S,T,S向每个点连边,每个点向T连边

将所有点划分为两个集合S与T,一开始S中只有S,其它点都在T中

用一棵线段树维护所有连接属于两个集合的点的边,权值为f[1][u]+f[0][v]

按拓扑序依次计算去掉每个点后图中的最长路

对于当前计算的点x,先将所有连向x的边删除,此时最长路长度为线段树中的最大值

然后再将所有x出发的边加入线段树中

时间复杂度$O(m\log n)$

#include<cstdio>
#define N 500010
int n,m,i,j,x,y,g[2][N],nxt[2][N<<2],v[2][N<<2],ed,d[N],q[N],l,r,fin,ans,f[2][N],S,T,val[N<<2];
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline void add(int x,int y){
d[x]++;v[0][++ed]=y;nxt[0][ed]=g[0][x];g[0][x]=ed;
v[1][ed]=x;nxt[1][ed]=g[1][y];g[1][y]=ed;
}
inline void ins(int c,int d){
int x=1,a=0,b=n,mid;
while(a<=b){
val[x]+=d;
if(a==b)return;
mid=(a+b)>>1;x<<=1;
if(c<=mid)b=mid;else a=mid+1,x|=1;
}
}
inline int ask(){
int x=1,a=0,b=n,mid;
while(a<b){
mid=(a+b)>>1;x<<=1;
if(val[x|1])a=mid+1,x|=1;else b=mid;
}
return a;
}
int main(){
read(n),read(m);
while(m--)read(x),read(y),add(x,y);
for(i=1;i<=n;i++)if(!d[i])q[++r]=i;
while(l<=r)for(i=g[1][q[l++]];i;i=nxt[1][i])if(!(--d[v[1][i]]))q[++r]=v[1][i];
for(i=1;i<=n;i++)for(j=g[0][x=q[i]];j;j=nxt[0][j])if(f[0][y=v[0][j]]>=f[0][x])f[0][x]=f[0][y]+1;
for(i=n;i;i--)for(j=g[1][x=q[i]];j;j=nxt[1][j])if(f[1][y=v[1][j]]>=f[1][x])f[1][x]=f[1][y]+1;
for(S=n+1,T=S+1,i=1;i<=n;i++)add(S,i),add(i,T);
for(i=1;i<=n;i++)ins(f[0][i],1);
for(fin=i=n;i;i--){
for(j=g[1][x=q[i]];j;j=nxt[1][j])ins(f[1][v[1][j]]+(v[1][j]<=n)+f[0][x],-1);
if((y=ask())<fin)ans=x,fin=y;
for(j=g[0][x];j;j=nxt[0][j])ins(f[0][v[0][j]]+(v[0][j]<=n)+f[1][x],1);
}
return printf("%d %d",ans,fin),0;
}

  

BZOJ3832 : [Poi2014]Rally的更多相关文章

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

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

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

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

  3. BZOJ3832: [Poi2014]Rally(拓扑排序 堆)

    题意 题目链接 Sol 最直观的思路是求出删除每个点后的最长路,我们考虑这玩意儿怎么求 设\(f[i]\)表示以\(i\)结尾的最长路长度,\(g[i]\)表示以\(i\)开始的最长路长度 根据DAG ...

  4. 并不对劲的bzoj3832: [Poi2014]Rally

    传送门-> 这题的原理看上去很神奇. 称拓扑图中入度为0的点为“起点”,出度为0的点为“终点”. 因为“起点”和“终点”可能有很多个,算起来会很麻烦,所以新建“超级起点”S,向所有点连边,“超级 ...

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

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

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

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

  7. 3832: [Poi2014]Rally

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

  8. [POI2014]Rally

    OJ题号:BZOJ3832.洛谷3573 思路: 建立超级源汇$S$和$T$,DP求出分别以$S$和$T$为源点的最长路$diss$和$dist$. 对于每条边$i$,设定一个权值$w_i=diss_ ...

  9. 【bzoj3832】Rally

    Portal -->bzoj3832 Description ​ 给你一个DAG,每条边长度都是\(1\),请找一个点满足删掉这个点之后剩余图中的最长路最短 Solution ​​ 这题的话感觉 ...

随机推荐

  1. ruby实现简易计算器

    (这些文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) 回到家里,用的还是windows系统,ruby的编辑器换成了Aptana Studio 3 p ...

  2. poj1258 Agri-Net 最小生成树

    Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 44032   Accepted: 18001 Descri ...

  3. BZOJ 1004

    一道奇怪的数学题.为了这道题我看了很多题解,到底还是一知半解..整个感觉就是上了一场数学课. HNOI2008 Cards 题目描述 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有 ...

  4. 【OpenStack】OpenStack系列11之namaspace&openvswitch原理实践

    Namespace实现网络隔离与互通 新建ns: ip netns add foo 查看ns: ip netns 查看ns详细配置: ip netns exec foo ip addr 设置ns内部l ...

  5. Redis windows安装配置与Jedis访问数据库

    一 Redis概要 Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.它通常被称为数据结构服务器 ...

  6. 使用ajax解决ie缓存问题

    1.在XMLHttpRequest/发送的请求之前 加上 XMLHttpRequest.setRequestHeader("If-Modified-Since","0&q ...

  7. css样式,层叠顺序属性z-index

    在做项目的时候,居然单击后显示的顺序一直被别的li标签压着,最后终于找到了,是css的z-index属性赋值了,值越大,显示的层就越高 详情推荐百度百科:z-index z-index是针对网页显示中 ...

  8. Eclipse调试:F5、F6、F7、F8

    F5:跳入方法 F6:向下逐行调试 F7:跳出方法 F8:直接跳转到下一个断点 转载自:http://blog.sina.com.cn/s/blog_6271df6f0101d856.html

  9. bootstrap学习总结1

    什么是Bootstrap? bootstrap就是一个前端框架,有Twitter公司开发 最大的优点: 开源 : 响应式设计:Bootstrap 的响应式 CSS 能够自适应于台式机.平板电脑和手机. ...

  10. iOS设备通知中心精品推荐消息删除

    如要彻底解决这个问题可以通过手机连接PC端91助手—功能大全—文件管理,进入/Library/MobileSubstrate/DynamicLibraries 文件夹,把AppSafety开头的文件都 ...