行星与王国(ID14133)【题解】

说实话,我觉得真没啥好讲的,tarjan《太监》算法是肯定逃不掉的(起码本蒟蒻认为是这样的,肯定有大佬有其他方法),同时这也是模板题,再加个桶,就AC了。
这道题的重点在于tarjan算法。

代码如下,请不要抄袭题解,代码仅用于学习与参考!!!

int n,m,cnt=0,top=0,ans=0,rt[MAX_N],stk[MAX_N],low[MAX_N],dfn[MAX_N];
vector<int> E[MAX_N];
bool col[MAX_N];
int B[MAX_N];
void tarjan(int u){
	dfn[u]=low[u]=++cnt;
	stk[++top]=u;
	for(auto i:E[u]){
		if(!dfn[i]){tarjan(i);low[u]=min(low[u],low[i]);}
		else if(!rt[i])low[u]=min(low[u],dfn[i]);
	}
	if(low[u]==dfn[u]){
		rt[u]=u;
		while(stk[top]!=u){rt[stk[top]]=u;top--;}
		top--;
	}
	return;
}

e,不能发AC代码,可以只露Tarjan部分

@向耕立

你帮他改了吧?。【我以前都这样】