poj1236 Network of Schools

来源:互联网 发布:keyerror python 编辑:程序博客网 时间:2024/05/15 13:10
#include <iostream>#include<cstdio>#include<algorithm>#include<vector>#include<cstring>using namespace std;int n;bool used[150];vector<int> g[150],rg[150],vs,v;void dfs(int v,vector<int>& vs){    used[v]=true;    for(int i=0;i<g[v].size();i++)    {        int &u=g[v][i];        if(!used[u])            dfs(u,vs);    }    vs.push_back(v);}void rdfs(int v,vector<int> &vs){    used[v]=true;    for(int i=0;i<rg[v].size();i++)    {        int &u=rg[v][i];        if(!used[u])            rdfs(u,vs);    }    vs.push_back(v);}int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++)    {        int num;        while(scanf("%d",&num),num)        {            g[i].push_back(num);            rg[num].push_back(i);        }    }    memset(used,0,sizeof(used));    for(int i=1;i<=n;i++)    {        if(!used[i])            dfs(i,vs);    }    memset(used,0,sizeof(used));    int ans1=0;    for(int i=vs.size()-1;i>=0;i--)    {        if(!used[vs[i]])        {            ans1++;            dfs(vs[i],v);        }    }    memset(used,0,sizeof(used));    int k=0;    for(int i=vs.size()-1;i>=0;i--)    {        if(!used[vs[i]])        {            rdfs(vs[i],v);            k++;        }    }    memset(used,0,sizeof(used));    int ans2=0;     for(int i=v.size()-1;i>=0;i--)    {        if(!used[v[i]])        {            ans2++;            rdfs(v[i],vs);        }    }    printf("%d\n",ans1);    if(k==1)        printf("0\n");    else        printf("%d\n",max(ans1,ans2));    return 0;}

0 0
原创粉丝点击