#include<iostream>
#include<cstdlib>
using namespace std;
#define N 10000
#define M 50000
struct
{
int s,e;
}edge[M];
typedef struct Arc
{
int v;
struct Arc*next;
}arc;
arc *cow[N],*rcow[N];
int n,m;
int cnt,ts[N],deg[N],sc[N];
char v[N];
void dfsr(int t)
{
v[t]=1;
arc*p;
for(p=rcow[t];p;p=p->next)
if(!v[p->v])
dfsr(p->v);
ts[cnt++]=t;
}
void dfs(int t)
{
v[t]=1;
sc[t]=cnt;
arc*p;
for(p=cow[t];p;p=p->next)
if(!v[p->v])
dfs(p->v);
}
int main()
{
int s,e,i,k;
arc*p;
memset(cow,NULL,sizeof(cow));
memset(rcow,NULL,sizeof(rcow));
memset(deg,0,sizeof(deg));
scanf("%d%d",&n,&m);
for(i=0;i<m;i++)
{
scanf("%d%d",&s,&e);
s--,e--;
edge[i].s=s;
edge[i].e=e;
p=(arc*)malloc(sizeof(arc));
p->v=e;
p->next=cow[s];
cow[s]=p;
p=(arc*)malloc(sizeof(arc));
p->v=s;
p->next=rcow[e];
rcow[e]=p;
}
memset(v,0,sizeof(v));
cnt=0;
for(i=0;i<n;i++)
if(!v[i])
dfsr(i);
memset(v,0,sizeof(v));
cnt=0;
for(i=n-1;i>=0;i--)
if(!v[ts[i]])
{
dfs(ts[i]);
cnt++;
}
k=cnt;
for(i=0;i<m;i++)
{
s=edge[i].s;
e=edge[i].e;
if(sc[s]!=sc[e])
deg[sc[s]]++;
}
cnt=0;
for(i=0;i<k;i++)
{
if(!deg[i])
{
cnt++;
s=i;
}
}
if(cnt>1)
printf("0/n");
else
{
for(cnt=0,i=0;i<n;i++)
if(sc[i]==s)
cnt++;
printf("%d/n",cnt);
}
// system("pause");
return 0;
}
poj2186 Popular Cows
最新推荐文章于 2018-09-29 20:12:23 发布