POJ2186 Popular Cows 【强连通分量】+【Kosaraju】+【Tarjan】

578 篇文章 ¥299.90 ¥399.90
570 篇文章 ¥299.90 ¥399.90
本文详细解析了POJ2186编程题的解题思路,重点介绍了强连通分量的概念,并通过Kosaraju算法和Tarjan算法进行实现。通过实例探讨如何在图论问题中应用这两种算法,帮助程序员提升图算法解决实际问题的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
Popular Cows ( POJ No.2186)
每头牛都想成为牛群中的红人。给定 N 头牛的牛群和 M 个有序对(A, B)。 (A, B)表示牛 A 认
为牛 B 是红人。该关系具有传递性,所以如果牛 A 认为牛 B 是红人,牛 B 认为牛 C 是红人,
那么牛 A 也认为牛 C 是红人。不过,给定的有序对中可能包含(A, B)和(B, C),但不包含(A, C)。
求被其他所有牛认为是红人的牛的总数。
限制条件
 1 ≤ N ≤ 10000
 1 ≤ M ≤ 50000
 1 ≤ A, B ≤ N
 
Sample Input
3 3
1 2
2 1
2 3
Sample Output
1
次题为典型的求强连通分量的题目,将强连通分量缩点并得到DAG,
求的出度为0的强连通分量的点的个数就是答案
*/ 
//Kosaraju算法,异常巧妙
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=10000+10,maxm=50000+10;
int n,m,scc;
int stack[maxn],top;
int head1[maxn],head2[maxn];
struct node{
	int to,next;
};
node edge1[maxm],edge2[maxm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值