博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3832 : [Poi2014]Rally
阅读量:5946 次
发布时间:2019-06-19

本文共 1493 字,大约阅读时间需要 4 分钟。

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
#define N 500010int 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
>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())

  

 

转载地址:http://refxx.baihongyu.com/

你可能感兴趣的文章
线程存储简介
查看>>
WEEX系列 我的第一个WEEX DEMO
查看>>
Deploy NodeJS Docker to QiO Edge Cloud using Kubernetes
查看>>
【Hadoop学习】HDFS基本原理
查看>>
关于解决IE8以下版本获取DOM节点的方法
查看>>
vue学习笔记(二)
查看>>
Flask四之模板
查看>>
要不, 我们从右往左书写数组?
查看>>
我的面试准备过程--LeetCode(更新中)
查看>>
【145天】尚学堂高淇Java300集视频精华笔记(103-104)
查看>>
如何在 React Native 中写一个自定义模块
查看>>
SegmentFault 2017 年社区周报 Vol.5
查看>>
JS用原型对象写的贪吃蛇,很粗糙的代码
查看>>
mac安装consul
查看>>
JavaScript深入之bind的模拟实现
查看>>
Learning Notes - Understanding the Weird Parts of JavaScript
查看>>
SegmentFault 2017 年社区周报 Vol.4
查看>>
两种方式javascript实现图片预览
查看>>
数据结构面试 之 单链表是否有环及环入口点 附有最详细明了的图解
查看>>
RancherOS v0.8.0发布:支持离线安装,更佳部署体验
查看>>