强连通缩点,统计入度为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. java桌面项目打包_by icewee_写得太棒了,直接转载了

    前言: 我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同.其实将java程序打包成exe也需要这个可执行jar文件. 准备: ecl ...

  2. C/S结构与B/S结构的特点分析

    C/S结构与B/S结构的特点分析 为了区别于传统的C/S模式,才特意将其称为B/S模式.认识到这些结构的特征,对于系统的选型而言是很关键的. 1.系统的性能 在系统的性能方面,B/S占有优势的是其异地 ...

  3. Unity3d 获取屏幕depth与normal

    Depth 获取Depth的几种方法,分别有不同效果 1. <span style="font-size:14px;">            float2 depth ...

  4. Unity Skin Shader Optimized

    Shader "Skin Shader" { Properties { _MainTex ("Diffuse (RGB)", 2D) = "white ...

  5. Oracle 插入超4000字节的CLOB字段的处理方法

    最近在做系统开发的时候需要想Oracle数据库插入超过4000字节的CLOB字段,在网上查询了N久才发现下面的解决方案,故留存以备后查. 我们可以通过创建单独的OracleCommand来进行指定的插 ...

  6. javascript:void到底是个什么?

    一般都是用作 实现 如下功能,当点击一个超链接的时候,不想出发超链接自带的动作,而触发自定义的js方法,一般与onclick 一起出现.如果不写void(0)点击超链接时候虽然调用js方法,但是也会出 ...

  7. Bzoj 1696: [Usaco2007 Feb]Building A New Barn新牛舍 中位数,数学

    1696: [Usaco2007 Feb]Building A New Barn新牛舍 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 394  Solve ...

  8. nginx做负载均衡器以及proxy缓存配置 - SegmentFault

    nginx做负载均衡器以及proxy缓存配置 - SegmentFault nginx做负载均衡器以及proxy缓存配置

  9. C# 调试

    1.监视窗口

  10. java的任务监听器监听任务

    Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务. 使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行.一般用的较少 监听 ...