[Luogu 2341] HAOI2006 受欢迎的牛
[Luogu 2341] HAOI2006 受欢迎的牛
智能推的水题,一看是省选题就给做了,做一半才发现 Tarjan 算法忘干净了。
Tarjan 求出SCC,算出每一个 SCC 包含原图的点数(size)以及新图上的出度(out)
并不用建图,Tarjan 时记一下 SCC 编号和 size,缩点时记录 out 就好了。
若存在唯一出度为 \(0\) 的 SCC,则这个 SCC 中所有的牛都是明星,即明星数量为这个 SCC 的 out。
否则答案为 \(0\)。
#include <algorithm>
#include <cstdio>
#include <stack>
using std::min;
using std::stack;
const int MAXN=10010,MAXM=50010;
bool exist[MAXN];
int n,m,cnt,num,sum,head[MAXN],DFN[MAXN],low[MAXN],SCC[MAXN],size[MAXN],out[MAXN];
stack<int> st;
struct edge
{
int nxt,to;
edge(int nxt=0,int to=0):nxt(nxt),to(to){}
}e[MAXM];
void AddEdge(int u,int v)
{
e[++cnt]=edge(head[u],v),head[u]=cnt;
}
void Tarjan(int u)
{
st.push(u),exist[u]=1,DFN[u]=low[u]=++num;
for(int i=head[u],v;i;i=e[i].nxt)
if(!DFN[v=e[i].to])
Tarjan(v),low[u]=min(low[u],low[v]);
else if(exist[v])
low[u]=min(low[u],DFN[v]);
if(DFN[u]==low[u])
{
++sum;
for(int t;u!=t;)
exist[t=st.top()]=0,st.pop(),++size[SCC[t]=sum];
}
}
void Shrink(void)
{
for(int u=1;u<=n;++u)
for(int i=head[u],v;i;i=e[i].nxt)
if(SCC[u]^SCC[v=e[i].to])
++out[SCC[u]];
}
int Ans(void)
{
int ans=0;
for(int i=1;i<=sum;++i)
if(!out[i])
if(ans)
return 0;
else
ans=size[i];
return ans;
}
int main(int argc,char *argv[])
{
scanf("%d %d",&n,&m);
for(int i=1,u,v;i<=m;++i)
{
scanf("%d %d",&u,&v);
AddEdge(u,v);
}
for(int i=1;i<=n;++i)
if(!DFN[i])
Tarjan(i);
Shrink();
printf("%d\n",Ans());
return 0;
}
谢谢阅读。
[Luogu 2341] HAOI2006 受欢迎的牛的更多相关文章
- [Luogu P2341] [HAOI2006]受欢迎的牛 (缩点+bitset)
题面 传送门:https://www.luogu.org/problemnew/show/P2341 Solution 前排提示,本蒟蒻做法既奇葩又麻烦 我们先可以把题目转换一下. 可以把一头牛喜欢另 ...
- 【luogu P2341 [HAOI2006]受欢迎的牛】 题解
题解报告:https://www.luogu.org/problemnew/show/P2341 我们把图中的强连通分量缩点,然后只有出度为0的牛是受欢迎的,这样如果出度为0的牛只有一个,说明受所有牛 ...
- Luogu P2341 [HAOI2006]受欢迎的牛 SCC缩点
把强连通分量缩点,如果有且仅有一个出度为0的强连通分量,那么答案就是他的size:如果有多个入度为0的,那么没有明星牛. #include<cstdio> #include<iost ...
- BZOJ1051或洛谷2341 [HAOI2006]受欢迎的牛
BZOJ原题链接 洛谷原题链接 显然在一个强连通分量里的奶牛都可以相互喜欢,所以可以用\(tarjan\)求强连通并缩点. 要求明星奶牛必须被所有人喜欢,显然缩点后的图必须满足只有一个点没有出度,因为 ...
- Luogu P2341 [HAOI2006]受欢迎的牛
这道题应该也是经典的SCC题了吧 印象中不知道在在班里上课的时候在紫书,ACM竞赛的那些书上看到多少次(有点奇怪) 首先思路很明显,就是要找出有多少个点,以它们为起点可以遍历整个图 首先考虑一种情况, ...
- 洛谷P2341 [HAOI2006]受欢迎的牛 (Tarjan,SCC缩点)
P2341 [HAOI2006]受欢迎的牛|[模板]强连通分量 https://www.luogu.org/problem/P2341 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就 ...
- bzoj1051 [HAOI2006]受欢迎的牛
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4773 Solved: 2541[Submit][Sta ...
- 【bzoj1051】 [HAOI2006]受欢迎的牛 tarjan缩点判出度算点数
[bzoj1051] [HAOI2006]受欢迎的牛 2014年1月8日7450 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B ...
- 1051: [HAOI2006]受欢迎的牛
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2276 Solved: 1190[Submit][Sta ...
随机推荐
- vue开发学习中遇到的问题以及解决方法
1:node-sass 安装失败,可使用 cnpm 安装 npm install cnpm -g --registry=https://registry.npm.taobao.org cnpm -v ...
- Thunder团队第六周 - Scrum会议6
Scrum会议6 小组名称:Thunder 项目名称:i阅app Scrum Master:邹双黛 工作照片: 邹双黛同学在拍照,所以不在照片内. 参会成员: 王航:http://www.cnblog ...
- Why is setTimeout(fn, 0) sometimes useful?
http://stackoverflow.com/questions/779379/why-is-settimeoutfn-0-sometimes-useful jquery validation s ...
- Java容器之Set接口
Set 接口: 1. Set 接口是 Collection 的子接口,Set 接口没有提供额外的方法,但实现 Set 接口的容器类中的元素是没有顺序的,且不可以重复: 2. Set 容器可以与数学中的 ...
- ACM 第十五天
计算几何基础 练习题 C - Wasted Time Mr. Scrooge, a very busy man, decided to count the time he wastes on all ...
- Spring Boot(三)自动装配
@Configuration和@Bean Spring提供了注解@Configuration和@Bean注解用来配置多个Bean,在以前的Spring项目中可以通过xml的方式配置: <bean ...
- nginx 设置默认虚拟 host
nginx 设置默认虚拟 host listren 80 default_server
- pycharm/webstorm创建react项目
1.安装nodejs 2.安装reactapp依赖:npm install -g create-react-app 在pycharm/webstorm中选择react
- Linux服务器记录并查询历史操作记录
Linux服务器在使用过程中,经常会有除自己之外的其他人员使用.并不是每个人都对Linux服务器特别熟悉,难免会有一些操作导致服务器报错. 因此,监控Linux服务器的操作并记录下来,是非常有必要的! ...
- 刚装的vs无法运行正确的程序