先用tarjan求出所有强连通分量,并执行缩点,得到一张有向无环图。第一问的答案是0入度点的个数,第二问的答案是0入度点和1入度电个数的最大值,如果是强连通图,答案为0
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=2e5+10;
struct Edge{
int v,nx;
}e[N];
int sta[N],top,cnt,ins[N],c[N],hd[N],tot,dfn[N],low[N],n,num,in[N],out[N];
void add(int u,int v)
{
e[++tot].v=v;
e[tot].nx=hd[u];
hd[u]=tot;
}
void tarjan(int u)
{
dfn[u]=low[u]=++num;
sta[++top]=u,ins[u]=1;
for(int i=hd[u];i;i=e[i].nx)
{
int v=e[i].v;
if(!dfn[v])
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(ins[v])