vijos1022(强联通分量模版题)

来源:互联网 发布:软件著作权地域范围 编辑:程序博客网 时间:2024/05/29 05:13


#include<cstdio>#include<algorithm>#include<cstring>using namespace std;bool a[500][500]={false},s[500]={false};int n,low[500]={0},dfn[500]={0},sta[500009]={0},top,ans,id;void dfs(int u){dfn[u]=low[u]=++id;sta[++top]=u;s[u]=true;for (int i=1;i<=n;i++) if (a[u][i]){if (dfn[i]==0){dfs(i);low[u]=min(low[u],low[i]);}else if (s[i]==true)low[u]=min(low[u],low[i]);}if (low[u]==dfn[u]){ans++;while (sta[top+1]!=u) s[sta[top]]=false,top--;}}int main(){scanf("%d",&n);for (int i=1;i<=n;i++){int x;while (scanf("%d",&x),x!=0) a[i][x]=true;}for (int i=1;i<=n;i++) if (dfn[i]==0) dfs(i);printf("%d",ans);return 0;}


0 0
原创粉丝点击