洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur
Tarjan缩点+拓扑排序
以后缩点后建图看n范围用vector ,或者直接用map+vector
结构体里数据要清空
代码:
#include <cstring>
#include <cctype>
#include <cstdio>
#include <vector>
#include <queue>
#define N 100005
using namespace std;
vector<int>G[N];
inline void Read(int &x)
{
register char ch=getchar();
for(x=;!isdigit(ch);ch=getchar());
for(;isdigit(ch);x=x*+ch-'',ch=getchar());
}
bool instack[N];
int n,m,ans,stack[N],low[N],dfn[N],col[N],sum[N],f1[N],f2[N],in1[N],in2[N],sumcol,tim,top;
inline int min(int a,int b) {return a>b?b:a;}
inline int max(int a,int b) {return a>b?a:b;}
void tarjan(int x)
{
low[x]=dfn[x]=++tim;
stack[++top]=x;
instack[x]=true;
for(int i=;i<G[x].size();++i)
{
int v=G[x][i];
if(!dfn[v])
{
tarjan(v);
low[x]=min(low[x],low[v]);
}
else if(instack[v]) low[x]=min(low[x],dfn[v]);
}
if(low[x]==dfn[x])
{
int k;
sumcol++;
do
{
k=stack[top--];
instack[k]=false;
col[k]=sumcol;
sum[sumcol]++;
}while(k!=x);
}
}
struct node
{
int f[N],in[N],cnt;
struct Edge
{
int to;
Edge * next;
}*head[N],edge[N];
void ins(int u,int v)
{
in[v]++;
edge[++cnt].next=head[u];
edge[cnt].to=v;
head[u]=cnt+edge;
}
void tppx()
{
queue<int>q;
for(int i=;i<=sumcol;++i) {f[i]=0xefefefef;if(!in[i]) q.push(i);}
f[col[]]=sum[col[]];
for(int now;!q.empty();)
{
now=q.front();
q.pop();
for(Edge * u=head[now];u;u=u->next)
{
int v=u->to;
f[v]=max(f[v],f[now]+sum[v]);
in[v]--;
if(!in[v]) q.push(v);
}
}
}
node ()
{
cnt=;
memset(in,,sizeof(in));
memset(head,NULL,sizeof(head));
}
};
node a,b;
int main()
{
Read(n);
Read(m);
for(int x,y;m--;)
{
Read(x);
Read(y);
G[x].push_back(y);
}
for(int i=;i<=n;++i) if(!dfn[i]) tarjan(i);
for(int i=;i<=n;++i)
{
for(int j=;j<G[i].size();++j)
{
int v=G[i][j];
if(col[i]!=col[v]) a.ins(col[i],col[v]),b.ins(col[v],col[i]);
}
}
a.tppx();
b.tppx();
ans=sum[col[]];
for(int i=;i<=n;++i)
{
for(int j=;j<G[i].size();++j)
{
int v=G[i][j];
ans=max(ans,a.f[col[v]]+b.f[col[i]]);
}
}
printf("%d\n",ans-sum[col[]]);
return ;
}
洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur的更多相关文章
- 洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur 解题报告
P3119 [USACO15JAN]草鉴定Grass Cownoisseur 题目描述 约翰有\(n\)块草场,编号1到\(n\),这些草场由若干条单行道相连.奶牛贝西是美味牧草的鉴赏家,她想到达尽可 ...
- 洛谷——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 || 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 ...
- 洛谷3119 [USACO15JAN]草鉴定Grass Cownoisseur
原题链接 显然一个强连通分量里所有草场都可以走到,所以先用\(tarjan\)找强连通并缩点. 对于缩点后的\(DAG\),先复制一张新图出来,然后对于原图中的每条边的终点向新图中该边对应的那条边的起 ...
- P3119 [USACO15JAN]草鉴定Grass Cownoisseur
题目描述 In an effort to better manage the grazing patterns of his cows, Farmer John has installed one-w ...
- 洛谷P3119 USACO15JAN 草鉴定
题目描述 In an effort to better manage the grazing patterns of his cows, Farmer John has installed one-w ...
- luogu P3119 [USACO15JAN]草鉴定Grass Cownoisseur
题目描述 In an effort to better manage the grazing patterns of his cows, Farmer John has installed one-w ...
- P3119 [USACO15JAN]草鉴定Grass Cownoisseur 分层图或者跑两次最长路
https://www.luogu.org/problemnew/show/P3119 题意 有一个有向图,允许最多走一次逆向的路,问从1再走回1,最多能经过几个点. 思路 (一)首先先缩点.自己在缩 ...
随机推荐
- PCL类的设计结构
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=243 类和应用程序接口 对于PCL的大多数类而言,调用接口(所有public ...
- In-App Purchase Programming Guide----(八) ---- Preparing for App Review
Preparing for App Review After you finish testing, you’re ready to submit your app for review. This ...
- Spring入门第十六课
接上一次讲课 先看代码: package logan.spring.study.annotation.repository; public interface UserRepository { voi ...
- ASP.NET学习笔记(三)ASP Global.asa 文件
Global.asa 文件 Global.asa 文件是一个可选的文件,它可包含可被 ASP 应用程序中每个页面访问的对象.变量以及方法的声明.所有合法的浏览器脚本都能在 Global.asa 中使用 ...
- Kth Largest Element in a Stream
Design a class to find the kth largest element in a stream. Note that it is the kth largest element ...
- SQL 截取字段空格之前的数据
MYSQL group by left(city,LOCATE(' ',city)) SQL select a,left(a,charindex( ' ',a)) FROM test SELECT g ...
- 2014-10-4 NOIP模拟赛
1.某种密码(password.*) 关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY.若KEY=∑▒[Ai*Bi],则 ...
- duliu——思维+线段树
题目 [题目描述]小 `D` 喜欢出毒瘤题毒人.当然,他的毒瘤更多体现在若干个难题组合在同一场比赛时.小 `D` 脑中有 $n$ 个毒瘤题 idea,第 $i$ 个的毒值为$d_i$.当第 $i$ 个 ...
- Mac PyCharm2018破解
1.下载破解补丁 https://link.jianshu.com/?t=http%3A%2F%2Fidea.lanyus.com%2Fjar%2FJetbrainsCrack-2.7-release ...
- git回退版本,已经commit过的文件丢了
参考:https://blog.csdn.net/qq_33877149/article/details/79705611 可以用 git reset --hard fa8694b 回退到以上相应的位 ...