poj2186 强连通分量+缩点
来源:互联网 发布:sqlserver列名无效 编辑:程序博客网 时间:2024/05/21 21:39
终于把Kosaraju算法看懂了,附上链接:点击打开链接
题意:如果A仰慕B,B仰慕C那么A仰慕C,1~n同牛中求有多少头牛被所有的牛仰慕。
分析:若存在多个牛同时被所有的牛仰慕,那么这些牛可以构成一个强连通分量,那么就可以把所有的强连通分量压缩成一个点,这样这些点中只有处于叶子节点的强连通分量才有可能被所有的店点经过,而且是只有一个叶子节点,这样在求强连通分量的过程中可以对这些点进行标记,最终就可以找到了。目前只学会了这一个算法,代码如下。
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;#define ll long longint a[7];const int maxn = 10000 + 5;struct Eage{ int to, next;}eage1[maxn*5], eage2[maxn*5];int vis[maxn];int head1[maxn], head2[maxn], lis[maxn];int n, m, cnt1, cnt2, t;void add(int x, int y)//建立正向图和反向图{ eage1[cnt1].to = y; eage1[cnt1].next = head1[x]; head1[x] = cnt1++; eage2[cnt2].to = x; eage2[cnt2].next = head2[y]; head2[y] = cnt2++;}void dfs1(int u)//类似于拓扑排序 { vis[u] = 1; for (int i = head1[u]; i != -1; i = eage1[i].next) { int v = eage1[i].to; if (!vis[v])dfs1(v); } lis[t++] = u;//将拓扑排序的结果从放到栈中,从结尾到开头}void dfs2(int u, int t){ vis[u] = t;//一个强连通分量 for (int i = head2[u]; i != -1; i = eage2[i].next) { int v = eage2[i].to; if (!vis[v])dfs2(v, t); }}int main(){ //freopen("input.txt", "r", stdin); cin >> n >> m; memset(head1, -1, sizeof(head1)); memset(head2, -1, sizeof(head2)); cnt1 = cnt2 = 0; for (int i = 0; i < m; i++) { int x, y; scanf("%d%d", &x, &y); add(x, y); } memset(vis, 0, sizeof(vis)); t = 0; for (int i = 1; i <= n; i++) { if (!vis[i])dfs1(i); } memset(vis, 0, sizeof(vis)); int ans = 0; for (int i = t-1; i >= 0; i--) { if (!vis[lis[i]]) { dfs2(lis[i], ++ans); } } int cnt = 0, u = 0; for (int i = 1; i <= n; i++) { if (vis[i] == ans) {//最后搜到的,也就是出度为0的个数 cnt++; u = i; } } memset(vis, 0, sizeof(vis)); dfs2(u, 1); for (int i = 1; i <= n; i++) { if (!vis[i]){ cnt = 0; break; } } cout << cnt << endl; return 0;}
Kosaraju
Kosaraju
Kosaraju
0 0
- POJ2186 Tarjan强连通分量+缩点
- poj2186 强连通分量+缩点
- poj2186 Popular Cows--Kosaraju算法 & 缩点 & 强连通分量
- poj2186强连通分量
- 强连通分量+poj2186
- poj2186强连通分量分解
- poj2186【利用强连通分量】
- 强连通分量-targin-poj2186
- poj2186 强联通分量 缩点
- 强连通分量缩点
- 强连通分量缩点
- POJ2186 Popular Cows【Kosaraju】【强连通分量】
- POJ2186 Popular Cows【Tarjan】【强连通分量】
- poj2186 Popular Cows(强连通分量tarjan)
- POJ2186 Popular Cows 强连通分量
- POJ2186 Popular Cows(强连通分量)
- POJ2186 Popular Cows 强连通分量
- POJ2186 Popular Cows 【图论】【强连通分量】
- idea安装jrebel对项目在tomcat中热部署问题
- iOS沙盒(sandBox)机制(一)之获取沙盒路径及目录说明
- 【各种系列教程】fms p2p视频教程 第一节安装已经运用
- 单用户模式下修改root用户密码并设置系统默认进入多用户模式
- 记录几个将来要看的问题
- poj2186 强连通分量+缩点
- 数据库课本习题及笔记
- 9.2总结
- IO端口与IO内存管理
- deepin系统安装到运行第一个ruby程式
- python对象的比较(is,==,对象大小比较>,<)
- CCLabel解析
- redis配置项解释
- 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用