[BZOJ1051] [HAOI2006] 受欢迎的牛 (强联通分量)
Description
Input
Output
一个数,即有多少头牛被所有的牛认为是受欢迎的。
Sample Input
1 2
2 1
2 3
Sample Output
HINT
Source
Solution
首先Tarjan缩点,那么一定有至少一个点没有出边。
如果没有出边的点只有一个,那么其他点都直接或间接指向这个点。
如果有多个,那么这几个无出边的点相互无边相连。
答案就是该点表示的强联通分量里的点的个数。
#include <bits/stdc++.h>
using namespace std;
struct edge
{
int u, v, nxt;
}e[];
stack<int> S;
int dfn[], low[], belong[], cnt1, cnt2;
int ins[], fst[][], outd[], siz[]; void addedge(int i, int *x, int u, int v)
{
e[i] = (edge){u, v, x[u]}, x[u] = i;
} void Tarjan(int u)
{
int v;
dfn[u] = low[u] = ++cnt1;
S.push(u), ins[u] = true;
for(int i = fst[][u]; i; i = e[i].nxt)
if(!dfn[e[i].v])
{
Tarjan(e[i].v);
low[u] = min(low[u], low[e[i].v]);
}
else if(ins[e[i].v])
low[u] = min(low[u], low[e[i].v]);
if(dfn[u] == low[u])
{
++cnt2;
do
{
v = S.top(), S.pop(), ins[v] = false;
belong[v] = cnt2, ++siz[cnt2];
}
while(u != v);
}
} int main()
{
int n, m, u, v, ans = -;
cin >> n >> m;
for(int i = ; i <= m; ++i)
{
cin >> u >> v;
addedge(i, fst[], u, v);
}
for(int i = ; i <= n; ++i)
if(!dfn[i]) Tarjan(i);
for(int i = ; i <= m; ++i)
{
u = belong[e[i].u], v = belong[e[i].v];
if(u != v)
{
addedge(i + m, fst[], u, v);
++outd[u];
}
}
for(int i = ; i <= cnt2; ++i)
if(!outd[i]) ans = ~ans ? : siz[i];
cout << ans << endl;
return ;
}
[BZOJ1051] [HAOI2006] 受欢迎的牛 (强联通分量)的更多相关文章
- bzoj1051: [HAOI2006]受欢迎的牛(强联通)
1051: [HAOI2006]受欢迎的牛 题目:传送门 题解: 今天又做一道水题... 强联通啊很明显 水个模板之后统计一下每个强联通分量中点的个数,再统计一下出度... 不难发现:缩点之后当且仅当 ...
- 【强联通分量缩点】【Tarjan】bzoj1051 [HAOI2006]受欢迎的牛
就是看是否有一些点,从其他任何点出发都可到达 定理:有向无环图中唯一出度为0的点,一定可以由任何点出发均可达. 所以缩点,若出度为零的点(强联通分量)唯一,则答案为该强联通分量中点的度数. 若不唯一, ...
- [BZOJ1051][HAOI2006] 受欢迎的牛 tarjan求联通分量
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5687 Solved: 3016[Submit][Sta ...
- bzoj1051 [HAOI2006]受欢迎的牛
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4773 Solved: 2541[Submit][Sta ...
- bzoj1051: [HAOI2006]受欢迎的牛(tarjan板子)
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6064 Solved: 3179[Submit][Sta ...
- [Bzoj1051][HAOI2006]受欢迎的牛(缩环)
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6676 Solved: 3502[Submit][Sta ...
- bzoj1051 [HAOI2006]受欢迎的牛 tarjan&&缩点
题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C ...
- [bzoj1051] [HAOI2006]受欢迎的牛 (Tarjan+缩点)
强连通图,缩点 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受 ...
- 【强连通分量】Bzoj1051 HAOI2006 受欢迎的牛
Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认 ...
随机推荐
- VS2015安装时问题汇总
安装VS2015遇到teamexplorer严重错误 在控制台管理员权限执行: fsutil behavior set SymlinkEvaluation L2L:1 L2R:1 R2L:1 R2R: ...
- 解决java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList这个问题
今天使用SSM框架,用@ResponseBody注解,出现了这个问题 java.lang.IllegalArgumentException: No converter found for return ...
- [记录]Shell中的getopts和getopt用法
Shell中的getopts和getopt用法 1.getopts getopts(shell内置命令)不能直接处理长的选项(如:--prefix=/home等),getopts有两个参数,第一个参数 ...
- 利用Python爬取可用的代理IP
前言 就以最近发现的一个免费代理IP网站为例:http://www.xicidaili.com/nn/.在使用的时候发现很多IP都用不了. 所以用Python写了个脚本,该脚本可以把能用的代理IP检测 ...
- 各种语系的unicode对应以及local编码方式
链接:http://www.doc88.com/p-801578373970.html 一.英文 Unicode范围: 0041-005A, 0061-007A (若含数字与符号,则为0021-007 ...
- haproxy配置文件详解和ACL功能
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- 关于VS2013调试IIS应用源代码时无法进入断点的问题总结
调试无法进入断点 前言:今天再次遇到之前调试无法进入断点的问题,本来想不写呢觉得没什么只是又犯了同样的错误,但是我发现这个问题我分析起来还是挺费劲的,我仔细想了想原因, 是因为自己对之前的错误没有进行 ...
- 【前端】Angular2 Ionic2 学习记录
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/angular2_ionic2.html 一.建立项目 ionic start ProductName super ...
- Linux忘记开机密码怎么办?
Linux忘记开机密码怎么办?1. 开机ESC/Shift,在出现grub画面时,用上下键选中你平时启动linux的那一项,然后按e键2. 再次用上下键选中你平时启动linux的那一项(类似于kern ...
- 【php】curl常见的错误号和解释
curl 错误代码列表 CURLE_UNSUPPORTED_PROTOCOL (1) – 您传送给 libcurl 的网址使用了此 libcurl 不支持的协议. 可能是您没有使用的编译时选项造成了这 ...