[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 ...
随机推荐
- linux下的常用技巧。
xargs linux下的多行合并~ [root@]# yum list installed|grep php|awk -F ' ' '{print $1}' php-channel-nrk.noa ...
- 团队作业7——第二次项目冲刺(Beta版本)-第一篇
1.当天站立式会议照片: 2.工作分工: 团队成员 分工 郭达22120 项目整合,后台代码 刘德培44060 数据库模块后台连接 石浩洋22061 前台界面优化 曾繁钦22056 前台界面优化.测试 ...
- ASP.NET 使用MVC4的EF5 Code First 入门(一):创建数据库
一.基本流程 建立模型→建立控制器→EF框架自动生成视图的数据库 二.基本理论 1.约定优于配置(Convention Over Configuration) 设计不好的框架通常需要多个配置文件,每一 ...
- YaoLingJump开发者日志(二)
熟悉了一点LGame里的套路,可以正式开工了. 增加了一个信息栏,显示得分.硬币数.生命值和当前关卡(仿照了超级玛丽的布局). 准备瑶玲的各种动画(静止.奔跑.跳跃.趴下.休息和死亡等). ...
- try catch finally 与continue的使用
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- hibernate映射表
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibern ...
- VS05错误:部署WEB文件失败
直接生成一个空项目就不存在这个问题了.
- Ajax在jQuery中的应用($.ajax()方法)
Ajax() 方法 $.ajax() 中的参数及使用方法 在jQuery中,$.ajax() 是最底层的方法,也是功能最强的方法.$.get().$.post().$.getScript().getJ ...
- WPF数据视图学习
当你绑定集合到ItemsControl,数据视图被安静地在幕后创造.视图位于数据源和绑定控件之间.数据视图是通往数据源的一个窗口.它跟踪当前项目,它支持诸如排序,过滤,和分组特征.这些特征独立于数据对 ...
- 【WCF】WCF 附录 高级主题 配置服务配额设置
微软产品自带一个“默认安全”方案.这也包括了WCF,意味着WCF中的多种配置可以设置来阻止诸如DOS(拒绝服务访问)攻击.微软为很多基于一个单一计算机的开发环境选择这样的设置.这也意味着默认设置中的一 ...