poj_2186: Popular Cows(tarjan基础题)
题意:求在图上可以被所有点到达的点的数量。
首先通过tarjan缩点,将所有内部两两可达的子图缩为一点,新图即为一个有向无环图(即DAG)。
在这个DAG上,若存在不止一个所有点均可到达的点,则所有点不满足题目要求。若存在一个,则该点所代表的连通分量的点数即为答案。
//DAG(有向无环图)上面至少存在一个出度为0的点,否则必然可以成环。
#include<cstdio>
#include<cstring>
#include<stack>
#include<vector>
using namespace std;
typedef long long LL;
;
int n,m;
int idd; //用来给点标记所属连通分量
int cnt[N]; //cnt[idd]表示编号为idd的连通分量的大小
int id[N]; //记录所属的连通分量
int now,dfn[N]; //表示搜索次序
int low[N]; //记录强连通分量子树的根节点的搜索次序
int d[N]; //d[i]==0时表示,编号为i的连通分量不认为任何其他分量popular
int vis[N],instack[N];
vector<int> adj[N];
stack<int> st;
void init()
{
idd=;
memset(vis,,sizeof(vis));
memset(d,,sizeof(d));
; i<=n; i++)
adj[i].clear();
while(!st.empty())
st.pop();
now=; //now 表示 tarjan次序
}
void tarjan(int u)
{
dfn[u]=low[u]=now++; //标记被访问时间
vis[u]=instack[u]=;
st.push(u);
; i<adj[u].size(); i++)
{
int x=adj[u][i]; //x表示下一个
if(!vis[x])
{
tarjan(x);
low[u]=min(low[u],low[x]);
}
else if(instack[x])
low[u]=min(low[u],dfn[x]); //注意两个min的区别
}
if(dfn[u]==low[u]) //u结点为根节点
{
,res=;
while(!st.empty()&&nowp!=u)
{
nowp=st.top(),st.pop();
instack[nowp]=;
id[nowp]=idd;
res++;
}
cnt[idd++]=res; //将连通分量的点数记录下来
}
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
; i<m; i++)
{
int u,v;
scanf("%d%d",&u,&v);
adj[v].push_back(u);
}
; i<=n; i++) //强连通分量缩点
if(!vis[i]) tarjan(i);
; i<=n; i++)
; j<adj[i].size(); j++)
if(id[i]!=id[adj[i][j]]) d[id[adj[i][j]]]++;
;
; i<idd; i++)
if(!d[i]) res++;
)
; i<idd; i++)
{
)
{
printf("%d\n",cnt[i]);
break;
}
}
else
puts(");
}
}
poj_2186: Popular Cows(tarjan基础题)的更多相关文章
- POJ 2186:Popular Cows Tarjan模板题
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25945 Accepted: 10612 De ...
- POJ 2168 Popular cows [Tarjan 缩点]
...
- poj 2186 Popular Cows tarjan
Popular Cows Description Every cow's dream is to become the most popular cow in the herd. In a herd ...
- poj 2186: Popular Cows(tarjan基础题)
题目链接 tarjan参考博客 题意:求在图上可以被所有点到达的点的数量. 首先通过tarjan缩点,将所有内部两两可达的子图缩为一点,新图即为一个有向无环图(即DAG). 在这个DAG上,若存在不止 ...
- POJ - 2186 Popular Cows tarjain模板题
http://poj.org/problem?id=2186 首先求出所有的强连通分量,分好块.然后对于每一个强连通分量,都标记下他们的出度.那么只有出度是0 的块才有可能是答案,为什么呢?因为既然你 ...
- [poj 2186]Popular Cows[Tarjan强连通分量]
题意: 有一群牛, a会认为b很帅, 且这种认为是传递的. 问有多少头牛被其他所有牛认为很帅~ 思路: 关键就是分析出缩点之后的有向树只能有一个叶子节点(出度为0). 做法就是Tarjan之后缩点统计 ...
- POJ 2186 Popular Cows tarjan缩点算法
题意:给出一个有向图代表牛和牛喜欢的关系,且喜欢关系具有传递性,求出能被所有牛喜欢的牛的总数(除了它自己以外的牛,或者它很自恋). 思路:这个的难处在于这是一个有环的图,对此我们可以使用tarjan算 ...
- USACO 2003 Fall Orange Popular Cows /// tarjan缩点 oj22833
题目大意: n头牛,m个崇拜关系,并且崇拜具有传递性 如果a崇拜b,b崇拜c,则a崇拜c 求最后有几头牛被所有牛崇拜 强连通分量内任意两点都能互达 所以只要强联通分量内有一点是 那么其它点也都会是 按 ...
- POJ 3180 The cow Prom Tarjan基础题
题目用google翻译实在看不懂 其实题目意思如下 给一个有向图,求点个数大于1的强联通分量个数 #include<cstdio> #include<algorithm> #i ...
随机推荐
- 第二天0605下午——超链接<a>与图片<img>
今天下午学习了超链接<a>标签和图片<img>标签,以下面代码为例: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
- selinux导致docker启动失败
1. 问题描述:一向运行正常的一群容器,突然有一天挂掉了,再也起不来,报错如下 Error response from daemon: devmapper: Error mounting '/dev/ ...
- servlet与jsp
Servlet生命周期 一.初始化阶段 当WEB客户第一次请求访问某个Servlet的时候,WEB容器将创建这个Servlet的实例.调用init()方法进行Servlet的初始化 一.响应客户请 ...
- linux-ubuntu下fastQC的安装
1.fastqc是在Java环境下运行的:所以在安装fastqc之前,Linux下要有相应的Java运行环境(JRE).且java的版本应该在1.8.0版以上 2.java的安装:下载最新版本的Jav ...
- 什么是Web Worker?
简单点说,Web Worker就是一个运行在后台的JavaScript线程,不会影响页面的响应. 我们知道,JavaScript是单线程的脚本语言,即同一时刻只能做一件事情,否则会带来极其复杂的同步问 ...
- EntityFramework Core迁移时出现数据库已存在对象问题解决方案
前言 刚开始接触EF Core时本着探索的精神去搞,搞着搞着发现出问题了,后来就一直没解决,觉得很是不爽,借着周末好好看看这块内容. EntityFramework Core迁移出现对象在数据库中已存 ...
- 关于TAR ZXVF命令解释
分别是四个参数x : 从 tar 包中把文件提取出来z : 表示 tar 包是被 gzip 压缩过的,所以解压时需要用 gunzip 解压v : 显示详细信息f xxx.tar.gz : 指定被处理的 ...
- HTTP协议 URL
http(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的We ...
- ubuntu16.04-x64系统中Jexus web server部署.NetCore和端口分析引发的猜想!
您有这样的牢骚么? 有一周没更新博客了,简单说下在干什么吧:主要是公司安排对接某旅游大公司的接口,接口数量倒也就10个左右,对接完后还需要加入到业务系统中和App端,因此还是需要花点时间的:时间上来说 ...
- 安装nginx+lua开发环境
一.安装nginx及搭建本地测试环境 1.创建安装目录: /data/nginx2.安装make: yum-y install gcc automake autoconf libt ...