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 ...
随机推荐
- (转)ASP.NET MVC路由配置
一.命名参数规范+匿名对象 1 routes.MapRoute(name: "Default", 2 url: "{controller}/{action}/{id}&q ...
- Linux驱动的两种加载方式过程分析
一.概念简述 在Linux下可以通过两种方式加载驱动程序:静态加载和动态加载. 静态加载就是把驱动程序直接编译进内核,系统启动后可以直接调用.静态加载的缺点是调试起来比较麻烦,每次修改一个地方都要重新 ...
- 改进的sqlhelper学习日志
下面就是详细的sqlhelper的代码了 using System; using System.Collections.Generic; using System.Linq; using System ...
- Unity Skin Shader Optimized
Shader "Skin Shader" { Properties { _MainTex ("Diffuse (RGB)", 2D) = "white ...
- bzoj 2463 [中山市选2009]谁能赢呢?(博弈)
2463: [中山市选2009]谁能赢呢? Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1290 Solved: 944[Submit][Stat ...
- Epoll之ET、LT模式
Epoll之ET.LT模式 在使用epoll时,在函数 epoll_ctl中如果不设定,epoll_event 的event默认为LT(水平触发)模式. 使用LT模式意味着只要fd处于可读或者可写状态 ...
- ImageView类简介
4.8 图片控件 本节将要介绍的是图片控件ImageView,首先对ImageView类进行简单介绍,然后通过一个案例来说明ImageView的用法. 4.8.1 ImageView类简介 Ima ...
- System.in与System.out(标准输入与标准输出)详解
package test; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; p ...
- [Node.js] Scraping Dynamic JavaScript Websites with Nightmare
Many websites have more than just simple static content. Dynamic content which is rendered by JavaSc ...
- JS为Select下拉框添加输入功能
JavaScript使用parentNode.nextSibling.value实现的本功能,实际上你会发现网页上有两个控件元素,一个是Select,一个是input,使用CSS将input覆盖于se ...