题意:n头奶牛,给出若干个欢迎关系a b,表示a欢迎b,欢迎关系是单向的,但是是可以传递的,如:a欢迎b,b欢迎c,那么a欢迎c 。另外每个奶牛都是欢迎他自己的。求出被所有的奶牛欢迎的奶牛的数目.#include <iostream>#include <cstdio>

#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long Ull;
#define MM(a,b) memset(a,b,sizeof(a));
const double eps = 1e-10;
const int  inf =0x7f7f7f7f;
const double pi=acos(-1);
const int maxn=10000;vector<int> G[maxn+10];
int n,m,deg[maxn+10],pre[maxn+10],dfs_clock,scc_cnt,sccno[maxn+10],lowlink[maxn+10];
stack<int> S;void tarjan(int u)
{pre[u]=lowlink[u]=++dfs_clock;S.push(u);for(int i=0;i<G[u].size();i++){int v=G[u][i];if(!pre[v]){tarjan(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++;while(1){int x=S.top();S.pop();sccno[x]=scc_cnt;if(x==u) break;//找到了当前强连通的起始节点就退出,//不然会破坏其他强连通分量}}
}void find_scc()
{MM(pre,0);MM(sccno,0);scc_cnt=dfs_clock=0;for(int i=1;i<=n;i++)if(!pre[i])tarjan(i);
}int main()
{while(~scanf("%d %d",&n,&m)){for(int i=1;i<=n;i++)G[i].clear();for(int i=1;i<=m;i++){int u,v;scanf("%d %d",&u,&v);G[u].push_back(v);}find_scc();MM(deg,0);for(int u=1;u<=n;u++)for(int j=0;j<G[u].size();j++){int v=G[u][j];if(sccno[u]!=sccno[v])deg[sccno[u]]=1;}int cnt=0,ans=0;for(int i=1;i<=scc_cnt;i++)if(!deg[i])cnt++;if(cnt==1){for(int i=1;i<=n;i++)if(!deg[sccno[i]])ans++;}printf("%d\n",ans);}return 0;
}

  分析:强连通分量裸题,缩点成DAG后,只要求出出度为0的强连通就好,若不止1个,则说明不存在

被所有牛都视为红人的强连通存在;否则直接输出出度为0的强连通的牛的个数

转载于:https://www.cnblogs.com/smilesundream/p/5474662.html

POJ 2186 挑战 --牛红人 强连通分量——Tarjan相关推荐

  1. POJ 2186 Popular Cows(强连通分量缩点,Tarjan算法)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16578 [解题报告] 给你一个有向图,问你有多少个点可以被其它 ...

  2. 强连通分量(Tarjan算法)和缩点

    强连通分量(Tarjan算法)和缩点 一些定义 给定一张有向图,对于图中任意两个节点 xxx 和 yyy ,存在从 xxx 到 yyy 的路径,也存在从 yyy 到 xxx 的路径,则称该有向图为强连 ...

  3. 求无向图的连通分量或有向图的强连通分量—tarjan()ccf高速公路

    概念定义: 在图论中,连通图基于连通的概念. 1. 连通(无向图): 若顶点Vi能通过路径到达Vj,那么称为Vi和Vj是连通的 对无向图:若从顶点Vi到顶点Vj有路径相连(当然从j到i也一定有路径), ...

  4. 强连通分量(Tarjan算法) 图解

    强连通分量(Tarjan算法) 前言 第一件事:没事不要while(m–),会带来不幸 第二件事:看博客先看看评论,如果博主他写错了的话- 简介 先讲几个定义 强连通:两个顶点 uuu,vvv 可以相 ...

  5. 强连通分量——tarjan算法缩点

    一. 什么是强连通分量? 强连通分量:在有向图G中,如果两个顶点u,v间(u->v)有一条从u到v的有向路径,同时还有一条从v到u的有向路径,则称两个顶点强连通(strongly connect ...

  6. 算法学习:强连通分量 --tarjan

    [定义] [强连通分量] 在一个子图中,任意点能够直接或者间接到达这个子图中的任意点,这个子图被称为强连通分量 [解决问题] 求图的强连通分量 同时能够起到 ...................缩点 ...

  7. 有向图强连通分量tarjan算法

    转自:http://www.byvoid.com/blog/scc-tarjan/ http://blog.csdn.net/geniusluzh/article/details/6601514 在有 ...

  8. 【HDU - 5934】Bomb (强连通分量Tarjan + 缩点)

    题干: There are NN bombs needing exploding. Each bomb has three attributes: exploding radius riri, pos ...

  9. POJ 1236 Network of Schools(强连通分量缩点求根节点和叶子节点的个数)

    Description: A number of schools are connected to a computer network. Agreements have been developed ...

最新文章

  1. java 继承与多态
  2. Three.js中实现ASCII文本动画效果
  3. sketchup 图片转模型_你应该知道的那些 Sketchup 实用快捷键和使用技巧!
  4. python字符串补空格输出_python格式化打印字符串
  5. C#中创建圆形/按钮(使用重绘)
  6. 面试题:彻底搞懂 Cookie 和 Session
  7. 运算均值方差_Python数据分析之NumPy(运算篇)
  8. 领导开会为什么总爱在桌子上摆一个水杯?
  9. 【分享】学长的安利来了~~O(∩_∩)O
  10. mybatis 业务逻辑
  11. python怎么导入csv文件数据-机器学习Python实践——数据导入(CSV)
  12. [大数据]Hadoop+Storm+Spark全套入门及实战视频教程
  13. 传统Tier1“大象转身”:不够快?你永远没有机会
  14. Python 安装pyinstaller失败的解决方法
  15. DW-概率统计打卡task01
  16. 21天学习挑战赛之Java网络编程(二)
  17. php字符串去空格函数,php去掉字符串中的空格
  18. IDEA查看maven依赖关系的方法
  19. 奥比中光深度相机ros2 humble版安装分享
  20. 交通灯2-核心器件选型报告

热门文章

  1. 在内存中读取函数的ShellCode并执行
  2. muduo学习笔记 - 第五章 高效的多线程日志
  3. CF-567F(President and Roads) DAG必经边
  4. python调用父类对象的几个方法
  5. y7000 intel nvidia 双显卡安装Ubuntu16.04
  6. c语言坐标输出图片,tc 如何在指定坐标处 输出bmp图片??
  7. c语言 文件序列化,Obj-C中的NSDate 、文件读写、序列化和反序列化
  8. mysql 数据库dbhelp_C# VS连接数据库DBhelp
  9. 在WORD文档里如何添加编号
  10. 大二寒假 之 丢失的13天