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. 深入理解java:1.1. 类加载器

    从java的动态性到类加载机制   我们知道,Java是一种动态语言. 那么怎样理解这个“动态”呢? 或者说一门语言具备了什么特性,才能称之为动态语言呢? 对于java,我是这样理解的. 我们都知道J ...

  2. 前端 CSS 盒子模型 目录

    CSS盒子模型介绍 padding border属性

  3. 前端导出excel文件

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

  4. redis在微博与微信等互联网应用笔记

    Redis实战redis在微博与微信等互联网应用实例讲解全集 1. 对象缓存 id user balance 1 john 1200 2 tom 3000 对于这种存储,redis可以使用mset o ...

  5. JDBC插入中文数据出现?号地解决问题

    1. 查看jdbc配置是否指定编码 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/te ...

  6. 小白学Python——用 百度AI 实现 OCR 文字识别

    百度AI功能还是很强大的,百度AI开放平台真的是测试接口的天堂,免费接口很多,当然有量的限制,但个人使用是完全够用的,什么人脸识别.MQTT服务器.语音识别等等,应有尽有. 看看OCR识别免费的量 快 ...

  7. Delphi中各个包中包含的控件

    经常有朋友提这样的问题,“我原来在delphi5或者delphi6中用的很熟的控件到哪里去了?是不是在delphi7中没有了呢?这是不是意味着我以前写的代码全都不能够移植到delphi7中来了呢?是不 ...

  8. hdu1465不easy系列之中的一个(错排)

    版权声明:本文为博主原创文章,未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/37512659 转载请注明出 ...

  9. ThinkPHP视图css和js加上版本号防止缓存

    前台模块中,我的所有控制器都继承BaseController,虽然ThinkPHP中我们提供了两个配置项 'TMPL_CACHE_ON' => false,// 禁止模板编译缓存 'HTML_C ...

  10. C++泛型程序设计---算法和提升

    算法和提升 算法:所谓算法就是一个求解问题的过程或公式,即,通过一个有穷的计算序列生成结果. 函数模板就是普通函数的泛化:它能对多种数据类型执行动作,并且能用以参数方式传递来的各种操作实现要执行的工作 ...