BZOJ 1051: [HAOI2006]受欢迎的牛 强连通缩点
题目链接:
http://www.lydsy.com/JudgeOnline/problem.php?id=1051
题解:
强连通缩点得到DAG图,将图转置一下,对入度为零的点跑dfs看看能不能访问到所有的点。
代码:
- #include<iostream>
- #include<cstdio>
- #include<vector>
- #include<stack>
- #include<algorithm>
- #include<cstring>
- using namespace std;
- const int maxn = + ;
- const int INF = 0x3f3f3f3f;
- vector<int> G[maxn],G2[maxn];
- int pre[maxn], lowlink[maxn], sccno[maxn], dfs_clock, scc_cnt;
- int ind[maxn],siz[maxn],vis[maxn];
- stack<int> S;
- int n,m;
- void dfs(int u) {
- pre[u] = lowlink[u] = ++dfs_clock;
- S.push(u);
- for (int i = ; i < G[u].size(); i++) {
- int v = G[u][i];
- if (!pre[v]) {
- dfs(v);
- lowlink[u] = min(lowlink[u], lowlink[v]);
- }
- else if (!sccno[v]) {
- lowlink[u] = min(lowlink[u], pre[v]);
- }
- }
- if (lowlink[u] == pre[u]) {
- scc_cnt++;
- int cnt = ;
- for (;;) {
- cnt++;
- int x = S.top(); S.pop();
- sccno[x] = scc_cnt;
- if (x == u) break;
- }
- siz[scc_cnt] = cnt;
- }
- }
- void find_scc(int n) {
- dfs_clock = scc_cnt = ;
- memset(sccno, , sizeof(sccno));
- memset(pre, , sizeof(pre));
- for (int i = ; i < n; i++) if (!pre[i]) dfs(i);
- //for (int i = 0; i < n; i++) printf("sccno[%d]:%d\n", i, sccno[i]);
- }
- void dfs2(int u) {
- if (vis[u]) return;
- vis[u] = ;
- for (int i = ; i < G2[u].size(); i++) {
- int v = G2[u][i];
- dfs2(v);
- }
- }
- void init() {
- for (int i = ; i < n; i++) G[i].clear(), G2[i].clear();
- memset(ind, ,sizeof(ind));
- memset(vis, , sizeof(vis));
- }
- int main() {
- while (scanf("%d%d", &n,&m) == && n) {
- init();
- for (int i = ; i < m; i++) {
- int u, v;
- scanf("%d%d", &u, &v); u--, v--;
- G[u].push_back(v);
- }
- find_scc(n);
- for (int i = ; i < n; i++) {
- for (int j = ; j < G[i].size(); j++) {
- int v = G[i][j];
- if (sccno[i] != sccno[v]) {
- G2[sccno[v]].push_back(sccno[i]);
- ind[sccno[i]]++;
- }
- }
- }
- int rt = -;
- for (int i = ; i <= scc_cnt; i++) {
- if (ind[i] == ) rt = i;
- }
- dfs2(rt);
- int su = ;
- for (int i = ; i <= scc_cnt; i++) {
- if (!vis[i]) {
- su = ;
- break;
- }
- }
- if (su) {
- printf("%d\n", siz[rt]);
- }
- else {
- printf("0\n");
- }
- }
- return ;
- }
BZOJ 1051: [HAOI2006]受欢迎的牛 强连通缩点的更多相关文章
- bzoj 1051: [HAOI2006]受欢迎的牛 tarjan缩点
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2092 Solved: 1096[Submit][Sta ...
- bzoj 1051: [HAOI2006]受欢迎的牛 (Tarjan 缩点)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1051 思路: 首先用Tarjan把环缩成点,要想收到所有人的欢迎,那么这个点的出度必为0,且 ...
- BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )
tarjan缩点后, 有且仅有一个出度为0的强连通分量即answer, 否则无解 ----------------------------------------------------------- ...
- BZOJ 1051: [HAOI2006]受欢迎的牛(SCC)
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 8172 Solved: 4470[Submit][Sta ...
- BZOJ 1051: [HAOI2006]受欢迎的牛 缩点
1051: [HAOI2006]受欢迎的牛 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- 洛谷 P2341 BZOJ 1051 [HAOI2006]受欢迎的牛
题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的——如果A喜 欢B,B喜欢C,那么A也喜欢C ...
- BZOJ 1051: [HAOI2006]受欢迎的牛
Description 一个有向图,求所以能被别的点到达的点的个数. Sol Tarjan + 强连通分量 + 缩点. 缩点以后找强连通分量,缩点,然后当图有且仅有1个出度为1的点时,有答案. Cod ...
- bzoj 1051 [HAOI2006]受欢迎的牛(tarjan缩点)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1051 题解:缩点之后判断出度为0的有几个,只有一个那么输出那个强连通块的点数,否者 ...
- 【BZOJ 1051】 1051: [HAOI2006]受欢迎的牛 (SCC)
1051: [HAOI2006]受欢迎的牛 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如 ...
随机推荐
- cocos2d-x游戏循环与调度
每一个游戏程序都有一个循环在不断运行,它是有导演对象来管理很维护.如果需要场景中的精灵运动起来,我们可以在游戏循环中使用定时器(Scheduler)对精灵等对象的运行进行调度.因为Node类封装了Sc ...
- 移动端边框1px的实现
查看京东的移动端1px实现原理,用的是:after和css3的scale(0.5)缩放. border-right fr:after{ height:100%; content:' '; width: ...
- 推荐5个应用 jQuery 特效的精美特效
1.jQuery歌词同步的音乐播放器插件 精巧实用 之前我们分享过很多音乐播放器和视频播放器,很多播放器的UI界面都非常酷,特别是利用HTML5和CSS3实现的一些动画特效.今天要分享的一款基于jQu ...
- Java中注解Annotation的定义、使用、解析
此例子,用于说明如何在Java中对“注解 Annotation”的定义.使用和解析的操作.注解一般用于自定义开发框架中,至于为什么使用,此处不作过多说明,这里只说明如何使用,以作备记.下面例子已测试, ...
- 跨frame操作dom元素
今天,一群友问到跨frame操作dom元素的问题.于是写了个demo,在此发表在博客里面,供其他同道中人参考! 创建child.html内容如下: <!DOCTYPE HTML PUBLIC & ...
- Linux下编译安装mysql-5.0.45.tar.gz
安装环境:VMware9(桥接模式) + Linux bogon 2.6.32-642.3.1.el6.x86_64(查看linux版本信息:uname -a) 先给出MySQL For Linux ...
- CentOS 7 用户账户配置
说明: 1.这篇博文记录的是CentOS 7 用户账户的配置,包括添加用户.添加用户组.删除用户.删除用户组等.其中包括分析用户的配置文件.目录以及对安全的思考. 2.用户配置方面CentOS 7与以 ...
- CSS1-CSS3 <color>颜色知识知多少?
非本人原创,原文转载自http://www.zhangxinxu.com/wordpress/2015/07/know-css1-css3-color/ by zhangxinxu from http ...
- 用canvas 绘制的饼状统计图、柱状统计图、折线统计图
canvas 绘制的饼状统计图 canvas 绘制的柱状统计图 canvas 绘制的折线统计图
- C# 条码标签打印程序,RDLC报表动态显示多条码标签的方法
初学c#,因最近公司客户要求原出货标签需实现条码化,练手的机会来了,遂动手做这个程序,开始都是一些增删改查操作一直很顺利,但到RDLC报表将条码显示到报表上犯难了,因为初学未接触过报表,上网查资料均一 ...