Code:

#include <bits/stdc++.h>
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 200002
using namespace std;
queue<int>Q;
stack<int>S;
vector<int>G[maxn],V[maxn];
map<int,int>mp[maxn];
int n,m,edges,scc,id;
int hd[maxn],to[maxn],nex[maxn],low[maxn],dfn[maxn],idx[maxn],vis[maxn],siz[maxn];
void addedge(int u,int v) {
nex[++edges]=hd[u],hd[u]=edges,to[edges]=v;
}
void tarjan(int u) {
S.push(u);
vis[u]=1, low[u]=dfn[u]=++scc;
for(int i=hd[u];i;i=nex[i]) {
int v=to[i];
if(!vis[v]) tarjan(v), low[u]=min(low[u], low[v]);
else if(vis[v]==1) low[u]=min(low[u], dfn[v]);
}
if(low[u]==dfn[u]) {
++id;
for(;;) {
int x=S.top(); S.pop();
idx[x]=id;
++siz[id];
vis[x]=-1;
if(x==u) break;
}
}
}
int h1[maxn],h2[maxn], vis1[maxn],vis2[maxn],inq[maxn], ge[maxn];
void spfa1() {
int s=idx[1];
Q.push(s);
inq[s]=1;
h1[s]=siz[s];
while(!Q.empty()) {
int u=Q.front(); Q.pop();
ge[u]=1;
inq[u]=0;
for(int i=0;i<G[u].size();++i) {
int v=G[u][i];
if(h1[v] < h1[u] + siz[v]) {
h1[v] = h1[u] + siz[v];
if(!inq[v]) {
Q.push(v);
inq[v]=1;
}
}
}
}
}
void spfa2() {
int s=idx[1];
Q.push(s);
inq[s]=1;
h2[s]=siz[s];
while(!Q.empty()) {
int u=Q.front(); Q.pop();
inq[u]=0;
for(int i=0;i<V[u].size();++i) {
int v=V[u][i];
if(h2[v] < h2[u] + siz[v]) {
h2[v] = h2[u] + siz[v];
if(!inq[v]) {
Q.push(v);
inq[v]=1;
}
}
}
}
}
int main() {
// setIO("input");
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i) {
int x,y;
scanf("%d%d",&x,&y);
addedge(x,y);
}
for(int i=1;i<=n;++i) if(!vis[i]) tarjan(i);
for(int i=1;i<=n;++i) {
int cur=idx[i];
for(int j=hd[i];j;j=nex[j]) {
int too=idx[to[j]];
if(cur!=too && !mp[cur][too]) {
mp[cur][too]=1;
G[cur].push_back(too);
V[too].push_back(cur);
}
}
}
spfa2();
spfa1();
int ans=siz[idx[1]];
int re=0;
for(int i=1;i<=id;++i) {
if(!ge[i]) continue;
for(int j=0;j<V[i].size();++j)
{
int v=V[i][j];
if(h1[i] && h2[v])ans=max(ans, h1[i] + h2[v]-siz[idx[1]]);
}
}
printf("%d\n",ans);
return 0;
}

  

BZOJ 3887: [Usaco2015 Jan]Grass Cownoisseur tarjan + spfa的更多相关文章

  1. 洛谷—— P3119 [USACO15JAN]草鉴定Grass Cownoisseur || BZOJ——T 3887: [Usaco2015 Jan]Grass Cownoisseur

    http://www.lydsy.com/JudgeOnline/problem.php?id=3887|| https://www.luogu.org/problem/show?pid=3119 D ...

  2. [Usaco2015 Jan]Grass Cownoisseur Tarjan缩点+SPFA

    考试的时候忘了缩点,人为dfs模拟缩点,没想到竟然跑了30分,RB爆发... 边是可以重复走的,所以在同一个强连通分量里,无论从那个点进入从哪个点出,所有的点一定能被一条路走到. 要使用缩点. 然后我 ...

  3. bzoj3887: [Usaco2015 Jan]Grass Cownoisseur

    题意: 给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过?(一个点在路径中无论出现多少正整数次对答案的贡献均为1) =>有向图我们 ...

  4. BZOJ3887 [Usaco2015 Jan] Grass Cownoisseur 【tarjan】【DP】*

    BZOJ3887 [Usaco2015 Jan] Grass Cownoisseur Description In an effort to better manage the grazing pat ...

  5. [补档][Usaco2015 Jan]Grass Cownoisseur

    [Usaco2015 Jan]Grass Cownoisseur 题目 给一个有向图,然后选一条路径起点终点都为1的路径出来,有一次机会可以沿某条边逆方向走,问最多有多少个点可以被经过? (一个点在路 ...

  6. [Usaco2015 Jan]Grass Cownoisseur 图论 tarjan spfa

    先缩点,对于缩点后的DAG,正反跑spfa,枚举每条边进行翻转即可 #include<cstdio> #include<cstring> #include<iostrea ...

  7. 【BZOJ3887】【Usaco2015 Jan】Grass Cownoisseur Tarjan+Spfa

    我们可以看出这个东西可以缩点成DAG,因为我们在所称的点里用特技的话,要么没用,要么削弱自己对点的收割能力与边的联通权,所以我们缩完点之后在图上枚举反向的变,因为我们只可能反向一条边,而且我们知道在这 ...

  8. BZOJ 3887/Luogu P3119: [Usaco2015 Jan]Grass Cownoisseur (强连通分量+最长路)

    分层建图,反向边建在两层之间,两层内部分别建正向边,tarjan缩点后,拓扑排序求一次1所在强连通分量和1+n所在强联通分量的最长路(长度定义为路径上的强联通分量内部点数和).然后由于1所在强连通分量 ...

  9. BZOJ3887 [Usaco2015 Jan]Grass Cownoisseur[缩点]

    首先看得出缩点的套路.跑出DAG之后,考虑怎么用逆行条件.首先可以不用,这样只能待原地不动.用的话,考虑在DAG上向后走,必须得逆行到1号点缩点后所在点的前面,才能再走回去. 于是统计从1号点缩点所在 ...

随机推荐

  1. python+selenium元素定位之XPath学习01

    参考文档1:https://www.w3school.com.cn/xpath/xpath_syntax.asp 参考文档2:https://www.runoob.com/xpath/xpath-tu ...

  2. Linux操作系统目录一览表

    / // 根目录 /bin //存放必要的命令 比如ls.cp.mkdir等命令 /boot //存放内核以及启动所需的文件 /dev //存放硬件设备文件 比如声卡.磁盘.光驱 /etc //存放系 ...

  3. CentOS7 NAT配置

    环境说明:Cloud1中的GE0/0/1.GE0/0/3.GE0/0/5接口,分别与Centos7中的eth1.eth2.eth3接口桥接到同一虚拟网卡,R1,R2,R3均配置一条静态默认路由指向Ce ...

  4. Unix时间戳和Java 的 System.currentTimeMillis()的区别

  5. 前端导出excel文件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. express接受ajax的发送post请求

    两种常用的方式: $.ajax({ type: "POST", url: '/everdayPost', // data: JSON.parse({cont:data}),注意: ...

  7. Bootstrap字体图标Font-Awesome 使用教程

    转载自:https://blog.csdn.net/crper/article/details/46293295   以备记录使用.

  8. java基础笔记(9)

    通过JDBC像数据库实现CRUD操作,这里通过一个存储查看人员的案例来了解java是如何通过JDBC实现与数据库的连接,三层结构中的模型层(数据访问),控制层(业务逻辑).以及视图层(表示层)又是怎么 ...

  9. 服务器上部署django项目流程?

    1. 简单粗暴 项目开发完毕,在部署之前需要再配置文件中将 ALLOWED_HOSTS配置设置为:当前服务器IP或*,如: ALLOWED_HOSTS = ["*",] 然后将源码 ...

  10. pureftp安装

    1.下载 #cd /usr/local/src #wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.36.t ...