[USACO15JAN]草鉴定Grass Cownoisseur (分层图,最长路,$Tarjan$)
题目链接
Solution
水水的套路题。
可以考虑到一个环内的点是可以都到达的,所以 \(tajan\) 求出一个 \(DAG\) 。
然后 \(DAG\) 上的点权值就是 \(scc\) 的大小。
对于那条可以反的边,直接建两层图就好了。
最后跑最长路,第一个节点的 \(scc\) 在第二张图上的对应节点的答案即为答案。
Code
#include<bits/stdc++.h>
#define N 200008
#define in(x) x=read()
using namespace std;
int read()
{
char ch=getchar();int f=1,w=0;
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){w=w*10+ch-'0';ch=getchar();}
return f*w;
}
struct sj{int fr,to,next,w;}a[N*4];
int dfn[N],low[N],cnt;
int bl[N],siz[N];
int head[N],size,n,m;
int sta[N],top,v[N],tot,dis[N];
void add(int x,int y,int w)
{
a[++size].to=y;
a[size].fr=x;
a[size].next=head[x];
head[x]=size;
a[size].w=w;
}
void tarjan(int x)
{
dfn[x]=low[x]=++tot;
sta[++top]=x; v[x]=1;
for(int i=head[x];i;i=a[i].next)
{
int tt=a[i].to;
if(!dfn[tt]){
tarjan(tt);
low[x]=min(low[x],low[tt]);
}
else if(v[tt]) low[x]=min(low[x],dfn[tt]);
}
if(dfn[x]==low[x])
{
v[x]=0;
bl[x]=++cnt;
do{
siz[cnt]++;
v[sta[top]]=0;
bl[sta[top]]=cnt;
}while(sta[top--]!=x);
}
}
void SPFA()
{
memset(v,0,sizeof(v));
int s=bl[1],t=bl[1]+cnt;
queue<int>q; q.push(s); v[s]=1; dis[s]=0;
while(!q.empty())
{
int x=q.front();q.pop();v[x]=0;
for(int i=head[x];i;i=a[i].next)
{
int tt=a[i].to;
if(dis[tt]<dis[x]+a[i].w)
{
dis[tt]=dis[x]+a[i].w;
if(!v[tt]) q.push(tt),v[tt]=1;
}
}
}
printf("%d",dis[bl[1]+cnt]);
}
int main()
{
in(n),in(m);
for(int i=1;i<=m;i++)
{
int x,y; in(x),in(y);
add(x,y,0);
}
for(int i=1;i<=n;i++)
if(!dfn[i])tarjan(i);
memset(head,0,sizeof(head));
for(int i=1;i<=m;i++)
{
int tt=a[i].to,fr=a[i].fr;
if(bl[tt]!=bl[fr])
{
add(bl[fr],bl[tt],siz[bl[fr]]);
add(bl[fr]+cnt,bl[tt]+cnt,siz[bl[fr]]);
add(bl[tt],bl[fr]+cnt,siz[bl[tt]]);
}
}
memset(dis,-1,sizeof(dis));
SPFA();
return 0;
}
[USACO15JAN]草鉴定Grass Cownoisseur (分层图,最长路,$Tarjan$)的更多相关文章
- P3119 [USACO15JAN]草鉴定Grass Cownoisseur 分层图或者跑两次最长路
https://www.luogu.org/problemnew/show/P3119 题意 有一个有向图,允许最多走一次逆向的路,问从1再走回1,最多能经过几个点. 思路 (一)首先先缩点.自己在缩 ...
- [USACO15JAN]草鉴定Grass Cownoisseur(分层图+tarjan)
[USACO15JAN]草鉴定Grass Cownoisseur 题目描述 In an effort to better manage the grazing patterns of his cows ...
- 洛谷——P3119 [USACO15JAN]草鉴定Grass Cownoisseur
P3119 [USACO15JAN]草鉴定Grass Cownoisseur 题目描述 In an effort to better manage the grazing patterns of hi ...
- 洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur (SCC缩点,SPFA最长路,枚举反边)
P3119 [USACO15JAN]草鉴定Grass Cownoisseur 题目描述 In an effort to better manage the grazing patterns of hi ...
- 洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur 解题报告
P3119 [USACO15JAN]草鉴定Grass Cownoisseur 题目描述 约翰有\(n\)块草场,编号1到\(n\),这些草场由若干条单行道相连.奶牛贝西是美味牧草的鉴赏家,她想到达尽可 ...
- 【洛谷P3119】[USACO15JAN]草鉴定Grass Cownoisseur
草鉴定Grass Cownoisseur 题目链接 约翰有n块草场,编号1到n,这些草场由若干条单行道相连.奶牛贝西是美味牧草的鉴赏家,她想到达尽可能多的草场去品尝牧草. 贝西总是从1号草场出发,最后 ...
- P3119 [USACO15JAN]草鉴定Grass Cownoisseur
题目描述 In an effort to better manage the grazing patterns of his cows, Farmer John has installed one-w ...
- [Luogu P3119] [USACO15JAN]草鉴定Grass Cownoisseur (缩点+图上DP)
题面 传送门:https://www.luogu.org/problemnew/show/P3119 Solution 这题显然要先把缩点做了. 然后我们就可以考虑如何处理走反向边的问题. 像我这样的 ...
- luogu P3119 [USACO15JAN]草鉴定Grass Cownoisseur
题目描述 In an effort to better manage the grazing patterns of his cows, Farmer John has installed one-w ...
随机推荐
- Java8函数之旅 (三) --几道关于流的练习题
为什么要有练习题? 所谓学而不思则罔,思而不学则殆,在系列第一篇就表明我认为写博客,既是分享,也是自己的巩固,我深信"纸上得来终觉浅,绝知此事要躬行"的道理,因此之后的几篇博 ...
- wing ide 注释
ctrl-.是批量注视 ctrl->向前缩进 ctrl-<向后缩进
- java基础面试题:抽象类中是否可以有静态的main方法?
- C的xml编程-libxml2
这里主要讲述libxml2在linux下的使用. (以下内容除了linux下的安装步骤是自己写的,其余均出自http://www.blogjava.net/wxb_nudt/archive/2007/ ...
- 微信小程序的开发——01小程序的执行流程是怎样的?
作者:叶小钗 转载至:https://www.cnblogs.com/yexiaochai/p/9346043.html 我们这边最近一直在做基础服务,这一切都是为了完善技术体系,这里对于前端来说便是 ...
- C++ 学习笔记 (六) 继承- 子类与父类有同名函数,变量
学习了类的继承,今天说一下当父类与子类中有同名函数和变量时那么程序将怎么执行.首先明确当基类和子类有同名函数或者变量时,子类依然从父类继承. 举例说明: 例程说明: 父类和子类有同名的成员 data: ...
- 【NTT】bzoj3992: [SDOI2015]序列统计
板子题都差点不会了 Description 小C有一个集合S,里面的元素都是小于M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数 列,数列中的每个数都属于集合S.小C用这个生成器生 ...
- stm32-IIC读写EEPROM—时序说明
I2C 通讯协议:(Inter-Integrated Circuit)是由Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要USART.CAN 等通讯协议的外部收发设备,现在 ...
- 动态规划:HDU1224-Free DIY Tour
Free DIY Tour Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 【转载】2015年8月编程语言排行榜:Java遥遥领先
Java以4.5%的差距遥遥领先于第二名,回顾以前Java有这样的成绩还是在2008年.Java version 8的成功主要是因为函数式编程习语的添加.Java出现下滑是在2010年 Oracle收 ...