BZOJ 1051 受欢迎的牛
Description
每一头牛的愿望就是变成一头最受欢迎的牛。现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎。 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认为牛C受欢迎。你的任务是求出有多少头牛被所有的牛认为是受欢迎的。
Input
第一行两个数N,M。 接下来M行,每行两个数A,B,意思是A认为B是受欢迎的(给出的信息有可能重复,即有可能出现多个A,B)
Output
一个数,即有多少头牛被所有的牛认为是受欢迎的。
Sample Input
1 2
2 1
2 3
Sample Output
HINT
Source
很明显,tarjan缩点+topsort,然后bitset大法好。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<bitset>
#include<queue>
#include<stack>
#include<cstdlib>
using namespace std; #define maxn 10010
#define maxm 60010
int n,m,cnt,tot,dfn[maxn],low[maxn],id[maxn],d[maxn];
int side[maxn],toit[maxm],next[maxm];
int nside[maxn],ntoit[maxm],nnext[maxm];
stack <int> S; bitset <maxn> bit[maxn]; bool vis[maxn]; inline void add(int a,int b) { next[++cnt] = side[a]; side[a] = cnt; toit[cnt] = b; } inline void ins(int a,int b)
{
nnext[++cnt] = nside[a]; ++d[b];
nside[a] = cnt; ntoit[cnt] = b;
} inline void dfs(int now)
{
S.push(now); dfn[now] = low[now] = ++cnt;
for (int i = side[now];i;i = next[i])
if (!vis[toit[i]])
{
if (!dfn[toit[i]]) dfs(toit[i]);
low[now] = min(low[toit[i]],low[now]);
}
if (dfn[now] == low[now])
{
++tot;
while (S.top() != now) vis[S.top()] = true,id[S.top()] = tot,S.pop();
vis[S.top()] = true,id[S.top()] = tot,S.pop();
}
} inline void rebuild()
{
cnt = ;
for (int i = ;i <= n;++i)
{
bit[id[i]].set(i-);
for (int j = side[i];j;j = next[j])
if (id[i] != id[toit[j]]) ins(id[i],id[toit[j]]);
}
} inline void topsort()
{
queue <int> team;
for (int i = ;i <= tot;++i) if (!d[i]) team.push(i);
while (!team.empty())
{
int now = team.front(); team.pop();
for (int i = nside[now];i;i = nnext[i])
{
bit[ntoit[i]] |= bit[now];
if (!--d[ntoit[i]]) team.push(ntoit[i]);
}
}
int ans = ;
for (int i = ;i <= n;++i) if (bit[id[i]].count() == n) ++ans;
printf("%d",ans);
} int main()
{
freopen("1051.in","r",stdin);
freopen("1051.out","w",stdout);
scanf("%d %d",&n,&m);
for (int i = ;i <= n;++i) add(i,i);
while (m--) { int a,b; scanf("%d %d",&a,&b); add(a,b); }
cnt = ;
for (int i = ;i <= n;++i) if (!dfn[i]) dfs(i);
rebuild();
topsort();
fclose(stdin); fclose(stdout);
return ;
}
BZOJ 1051 受欢迎的牛的更多相关文章
- BZOJ 1051 受欢迎的牛(Tarjan缩点)
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4573 Solved: 2428 [Submit][S ...
- 【tarjan】BZOJ 1051:受欢迎的牛
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3134 Solved: 1642[Submit][Sta ...
- BZOJ 1051 受欢迎的牛 缩点
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1051 题目大意: 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数( ...
- bzoj 1051 受欢迎的牛-tarjan
https://www.lydsy.com/JudgeOnline/problem.php?id=1051 如果A喜欢B,那么A->B连边,那么整个图储存下来,如果有好多个牛是受欢迎的,那么他们 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
- 【BZOJ】1051: [HAOI2006]受欢迎的牛(tarjan)
http://www.lydsy.com/JudgeOnline/problem.php?id=1051 这题还好-1A了..但是前提还是看了题解的 囧.....一开始认为是并查集,oh,不行,,无法 ...
- BZOJ 1051: [HAOI2006]受欢迎的牛 缩点
1051: [HAOI2006]受欢迎的牛 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- bzoj 1051: [HAOI2006]受欢迎的牛 tarjan缩点
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2092 Solved: 1096[Submit][Sta ...
- BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )
tarjan缩点后, 有且仅有一个出度为0的强连通分量即answer, 否则无解 ----------------------------------------------------------- ...
随机推荐
- HTML5简易在线画图工具
继上次学习了HTML5的路径画圆做了动态时钟.异次元空间的反转做了运动的太阳系,这两天将画线.画圆.填充等知识点结合起来做了一个简易的在线画图工具: 查看DEMO:HTML5简易在线画图工具 功能包括 ...
- [转]Animation 动画详解(一)——alpha、scale、translate、rotate、set的xml属性及用法
转载:http://blog.csdn.net/harvic880925/article/details/39996643 前言:这几天做客户回访,感触很大,用户只要是留反馈信息,总是一种恨铁不成钢的 ...
- 在32位Windows 8或Windows 7上安装Windows Phone 8 SDK
这需要一点技巧的,其实WPSDK8是支持32位系统的,可因为微软脑残的限制,安装方法如下: 这里必需要有一个工具,OllyDbg 2.0,去官网下载即可. 启动OD,在菜单打开选项窗口,在Events ...
- etrace 跟踪程序函数动态执行流程
https://github.com/elcritch/etrace 窗口1: 监控窗口,执行监控程序,显示监控结果 [root@monitor example]# pwd /root/etrace- ...
- Windows7如何在安全模式下卸载驱动(亲测)
在桌面“我的电脑”上点鼠标右键,选择“属性”,“硬件”,“设备管理器”,找到“显示卡选项”,打开前面的“+”,然后按鼠标右键,选择“卸载”就可以了. (亲测,主板驱动卸载成功启动)
- Customizing the Test Runner
There are several situations where you want to customize Robolectric's test runner to perform some o ...
- 实践过配置成功的VNC安装配置
VNC安装步骤说明那个 1.安装图形界面 #yum install tigervnc-server tigervnc 2.启动VNCServer #vncserver 对应的关闭图形界面的命令 ...
- 发现并认为这是jQuery1.4.4的一个Bug
说起来还觉得丢人,公司的系统开发了两年,目前jquery的版本还是用的1.4.4. mantis上的Bug一堆,今天在改bug的时候发现一个jQuery的Bug. 改bug嘛,一开始总是各种调试,总感 ...
- python 学习笔记(二)两种方式实现第一个python程序
在交互模式下: 如果要让Python打印出指定的文字,可以用print语句,然后把希望打印的文字用单引号或者双引号括起来,但不能混用单引号和双引号: >>> print 'hello ...
- 内存泄漏在 WPF 和 Silverlight 提防
瑞奇韭菜礼物 ︰ 内存泄漏在 WPF 和 Silverlight 提防 内存泄漏在 WPF 和 Silverlight 提防 WPF 和 Silverlight 允许您定义您的用户界面,用最少的代码将 ...