强连通缩点,统计入度为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 (强连通)的更多相关文章

  1. poj 2186 Popular Cows (强连通分量+缩点)

    http://poj.org/problem?id=2186 Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissi ...

  2. POJ 2186 Popular Cows(强连通分量缩点)

    题目链接:http://poj.org/problem?id=2186 题目意思大概是:给定N(N<=10000)个点和M(M<=50000)条有向边,求有多少个“受欢迎的点”.所谓的“受 ...

  3. POJ 2186 Popular Cows --强连通分量

    题意:给定一个有向图,问有多少个点由任意顶点出发都能达到. 分析:首先,在一个有向无环图中,能被所有点达到点,出度一定是0. 先求出所有的强连通分支,然后把每个强连通分支收缩成一个点,重新建图,这样, ...

  4. POJ 2186 Popular Cows 强连通分量模板

    题意 强连通分量,找独立的块 强连通分量裸题 #include <cstdio> #include <cstdlib> #include <cstring> #in ...

  5. 强连通分量分解 Kosaraju算法 (poj 2186 Popular Cows)

    poj 2186 Popular Cows 题意: 有N头牛, 给出M对关系, 如(1,2)代表1欢迎2, 关系是单向的且能够传递, 即1欢迎2不代表2欢迎1, 可是假设2也欢迎3那么1也欢迎3. 求 ...

  6. poj 2186 Popular Cows 【强连通分量Tarjan算法 + 树问题】

    题目地址:http://poj.org/problem?id=2186 Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Sub ...

  7. POJ 2186 Popular Cows (强联通)

    id=2186">http://poj.org/problem? id=2186 Popular Cows Time Limit: 2000MS   Memory Limit: 655 ...

  8. tarjan缩点练习 洛谷P3387 【模板】缩点+poj 2186 Popular Cows

    缩点练习 洛谷 P3387 [模板]缩点 缩点 解题思路: 都说是模板了...先缩点把有环图转换成DAG 然后拓扑排序即可 #include <bits/stdc++.h> using n ...

  9. [强连通分量] POJ 2186 Popular Cows

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 31815   Accepted: 12927 De ...

  10. POJ 2186 Popular Cows(强连通)

                                                                  Popular Cows Time Limit: 2000MS   Memo ...

随机推荐

  1. Linux Shell编程(16)——循环

    循环就是重复一些命令的代码块,如果条件不满足就退出循环. for loops for arg in [list] 这是一个基本的循环结构.它与C的for结构有很大不同. for arg in [lis ...

  2. windows 7 下 BCGControlBar 的安装破解

    一定要以管理员权限启动,否则没有注册码输入框,不能破解,折腾我好几遍 谨记

  3. Android问题:设置了requestWindowfeature(window.feature_no_title)后,为什么还要getwindow.setFlags?

    //设置窗体全屏getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams. ...

  4. MyEclipse 设置字体

    过了好几年,又开始用myeclipse  都忘了,  这里贴图用于记录 1.打开window - preferences . 2.打开General-Appearance-Colors and Fon ...

  5. Selenium API(C#)

    1 Fetching a Page driver.Url = "http://www.google.com"; 2 Locating UI Elements (WebElement ...

  6. Hdu 2475-Box LCT,动态树

    Box Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  7. [LeetCode] Distinct Subsequences 解题思路

    Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...

  8. Django中的Form

    Form 一.使用Form Django中的Form使用时一般有两种功能: 1.生成html标签 2.验证输入内容 要想使用django提供的form,要在views里导入form模块 from dj ...

  9. 外显子分析:cutadapt,去除序列adapter详细解析

    外显子测序时带有adapt接头,因此我们需要去除adapt接头,cutadapt的作用是去除adapt接头,一般用到如下命令: cutadapt -a AACCGGTT -o output.fastq ...

  10. 未能导入activex控件,请确保它正确注册

    这个错误"未能导入activex控件,请确保它正确注册"昨天下午让我和我同事花费了3个小时来调试这个错误,在使用VS2010的winfrom编程时加入com组件的时候,报这个错误( ...