给一个有向图,问有多少结点是其他所有结点都可以到达的。
等价于,在一个有向无环图上,找出度为0 的结点,如果出度为0的结点只有一个,那么这个就是答案,如果大于1个,则答案是0。
这题有环,所以先缩点。求唯一出度为0的强连通分量。
#include#include #include #include #include #define inf 0x3f3f3f3f using namespace std; #define M 10010//图中点数 int sta[M],top; bool vis[M]; int dfn[M]; int low[M]; int ccnt; //有向图强连通分量个数 int id; vector e[M]; vector part[M];//每个联通块的组成 int inpart[M];//每个原图上的点在哪个联通块里 int n,m,out[M]; void tarjan(int x) { int i,j; dfn[x]=low[x]=id++; vis[x]=1; sta[++top]=x; for(i=0;i 1)//大于一个出度为0的点 则没有符合条件的答案 { ans=0; break; } } printf("%d\n",ans); } return 0; }