POJ 2186.Popular Cows (强连通)
强连通缩点,统计入度为1的缩点后的点的个数
个数1的话输出这个强连通分量的点的数量
否则输出0;
code
/*
Kosaraju算法,无向图的强连通分量,时间复杂度O(n+m)
思路:
按照图G的深度遍历序列,在G的反图上进行深搜
能够搜到的点集就是一个强联通分量
*/ #include <iostream>
#include <cstring>
using namespace std;
const int INF = 10009;
//链接表,偶数边为原图,奇数边为反图
struct node {
int v, ne;
} edge[100009];
/*
scc是强连通子图的个数
dfn为深度遍历序列(逆序即反图的拓扑排序)
vis为访问标记,sum记录每个强连通分量的节点数
*/
int head[INF], dfn[INF], vis[INF], sum[INF], n, m, scc, cnt = 1, tol;
void adde (int u, int v) {
edge[++cnt].v = v;
edge[cnt].ne = head[u];
head[u] = cnt;
}
void dfs (int k) {
vis[k] = 1;
for (int i = head[k]; i != 0; i = edge[i].ne)
if ( (i & 1) == 0 && !vis[edge[i].v])
dfs (edge[i].v);
dfn[++tol] = k;
}
void ndfs (int k) {
vis[k] = scc, sum[scc]++;
for (int i = head[k]; i != 0; i = edge[i].ne)
if ( (i & 1) && !vis[edge[i].v])
ndfs (edge[i].v);
}
void Kosaraju() {
for (int i = 1; i <= n; i++)
if (!vis[i]) dfs (i);
memset (vis, 0, sizeof vis);
for (int i = n; i > 0; i--)
if (!vis[dfn[i]]) scc++, ndfs (dfn[i]);
}
int make() {
int deg[INF] = {0};
//由反图统计每个强联通点的有无出度
for (int i = 3; i <= cnt; i += 2) {
if (vis[edge[i].v] == vis[edge[i ^ 1].v]) continue;
deg[vis[edge[i].v]]++;
}
int j, t = 0;
for (int i = 1; i <= scc; i++)
if (deg[i] == 0) j = i, t++;
if (t == 1) return sum[j];
return 0;
}
int main() {
int x, y;
cin >> n >> m;
for (int i = 1; i <= m; i++) {
cin >> x >> y;
adde (x, y), adde (y, x);
}
Kosaraju();
cout << make();
return 0;
}
POJ 2186.Popular Cows (强连通)的更多相关文章
- poj 2186 Popular Cows (强连通分量+缩点)
http://poj.org/problem?id=2186 Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissi ...
- POJ 2186 Popular Cows(强连通分量缩点)
题目链接:http://poj.org/problem?id=2186 题目意思大概是:给定N(N<=10000)个点和M(M<=50000)条有向边,求有多少个“受欢迎的点”.所谓的“受 ...
- POJ 2186 Popular Cows --强连通分量
题意:给定一个有向图,问有多少个点由任意顶点出发都能达到. 分析:首先,在一个有向无环图中,能被所有点达到点,出度一定是0. 先求出所有的强连通分支,然后把每个强连通分支收缩成一个点,重新建图,这样, ...
- POJ 2186 Popular Cows 强连通分量模板
题意 强连通分量,找独立的块 强连通分量裸题 #include <cstdio> #include <cstdlib> #include <cstring> #in ...
- 强连通分量分解 Kosaraju算法 (poj 2186 Popular Cows)
poj 2186 Popular Cows 题意: 有N头牛, 给出M对关系, 如(1,2)代表1欢迎2, 关系是单向的且能够传递, 即1欢迎2不代表2欢迎1, 可是假设2也欢迎3那么1也欢迎3. 求 ...
- poj 2186 Popular Cows 【强连通分量Tarjan算法 + 树问题】
题目地址:http://poj.org/problem?id=2186 Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Sub ...
- POJ 2186 Popular Cows (强联通)
id=2186">http://poj.org/problem? id=2186 Popular Cows Time Limit: 2000MS Memory Limit: 655 ...
- tarjan缩点练习 洛谷P3387 【模板】缩点+poj 2186 Popular Cows
缩点练习 洛谷 P3387 [模板]缩点 缩点 解题思路: 都说是模板了...先缩点把有环图转换成DAG 然后拓扑排序即可 #include <bits/stdc++.h> using n ...
- [强连通分量] POJ 2186 Popular Cows
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 31815 Accepted: 12927 De ...
- POJ 2186 Popular Cows(强连通)
Popular Cows Time Limit: 2000MS Memo ...
随机推荐
- [XenServer] XenServer修改IP 以及 root密码
A.修改IP以及DNS 1. root用户登录console 2.输入命令获得UUID xe pif-list 3.利用UUID查看之前的IP,注意替换下面的1111111111 xe pif-pa ...
- Linux学习笔记7——linux中的静态库和动态库
一.静态库的编译 静态库的编译过程如下: 1.编译成目标文件 这里有一个可选项-static,调用格式:gcc -c -static 代码文件名.c 2.归档成静态库 A.归档的工具是ar工具,使用a ...
- Matlab与DSP联合开发
1.关于DSP开发环境 刚开始接触TI CCS的时候,用的是CCS2.2,当时CCS2.2又分成4个系列安装包 1.CCS6000 2.CCS5000 3.CCS2000 4.OMAP 都可以单独安装 ...
- iOS中控件的Frame属性和Bounds属性的区别
在iOS中,每个控件都是继承于UIView的,都会有视图的属性存在,控制这个视图的位置就有Frame和Bounds两个属性 frame指的是:该view在父view坐标系统中的位置和大小.(参照点是父 ...
- [转]让程序在崩溃时体面的退出之SEH+Dump文件
原文地址:http://blog.csdn.net/starlee/article/details/6649605 在我上篇文章<让程序在崩溃时体面的退出之SEH>中讲解了SEH中try/ ...
- 钥匙计数之一 - HDU 1438(状态压缩打表)
分析:首先想到每个钥匙的结尾有4种状态,不过题目还需要判断有三种不同的钥匙深度,所以每种深度结尾后有2^4种状态,0000->1111,不过题目还需需要有相邻的钥匙深度大于等于3,所以需要两种不 ...
- Circle - SGU 130(递推)
题目大意:一个圆上有2K个点,用K个线把他们连接起来,求出这些线最少可以把这个圆分成P部分,有N种分割方法.输出N和P. 分析:分割线一定是相互不相交的线,所以可以把这写分成两部分,f[i] += f ...
- hdoj 1276 士兵队列训练问题【模拟】
士兵队列训练问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- [置顶] SpecDD系列:“完成” 的定义
在当今充满变数和快节奏的大环境下,一个产品的上市时间已经成为产品成功与否的重要因素.如果对于“完成”没有一个清晰的定义,那么很可能会遭遇产品延期,风险,并且增加公司成本. “完成的定义”也被俗称为Do ...
- WCF 项目应用连载[2] - 创建Lig日志系统
WCF 项目应用连载[1] - 索引 - 轻量级的Log系统 - Lig Sample -序 现在我们创建一个Lig工程 - Litelog 2.1 创建Lig服务 _________________ ...