关于洛谷题解 P2835 【刻录光盘】

Tarjan详解

下面插上tarjan伪代码:

void tarjan(int now)
{
	dfn[now]=low[now]=++num;
	atack.push(now);
	inst[now]=true;
	for(int i=0;i

下面我们再来看这道题:

他让我们求最少发几个:

我们可已看出一个联通图中我们只需要在最开始的点给一个,那么它就会一直传到最底部;

即一个连通图只需要一个。那么问题就转化为找有几个连通图。那么我们可以找有几个入边为零的点即可。

#include
#include
#include
#include
#define si 205
using namespace std;
inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
		f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}
	return x*f;
}
int n,a,tot,num,bl[si],ru[si],nums[si],numb,dfn[si],low[si],ins[si];
vector map[si];
stack st;
void tarjan(int x)
{
	dfn[x]=low[x]=++num;
	ins[x]=1;
	st.push(x);
	for(int i=0;i

写一篇文章不容易,可否来个赞???。

你可能感兴趣的:(Tarjan)