#include<iostream>
#include<memory.h>
using namespace std;
int tp[11][11],visit[11];
int main()
{
int n,m,i,j,k,s,o,c;
int flag,count,a,b;
while(cin>>n>>m)
{
s=1;
o=0;
count=0;
memset(tp,0,sizeof(tp));
memset(visit,0,sizeof(visit));
for(i=1;i<=m;i++)
{
cin>>a>>b;
tp[a][b]=1;
}
/* for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
if(j==n)
cout<<tp[i][j]<<endl;
else
cout<<tp[i][j]<<" ";
}
*/
while(s)
{
flag=0;
c=0;
o++;
for(j=1;j<=n;j++)
{
for(i=1;i<=n;i++)
{
if(tp[i][j]==0 && visit[j]==0)
{
c++;
}
else
{
break;
}
}
if(c==n)
{
flag=0;
c=0;
}
else
{
flag=1;
c=0;
}
if(flag==0)
{
for(k=1;k<=n;k++)
tp[j][k]=0;
count++;
visit[j]=1;
}
}
if(o>n)
s=0;
else
s=1;
}
/* for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
if(j==n)
cout<<tp[i][j]<<endl;
else
cout<<tp[i][j]<<" ";
}
*/
if(count==n)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
/*
#include<iostream>
#include<memory.h>
using namespace std;
int tp[11][11],visit[11];
int n,m,u,v;
int dfs(int u)
{
visit[u]=-1;
for(v=1;v<=n;v++)
{
if(tp[u][v]==1)
{
if(visit[v]<0)
return 0;
else if(!visit[v] && !dfs(v))
return 0;
}
}
visit[u]=1;
return 1;
}
int topu()
{
for(u=1;u<=n;u++)
{
if(!visit[u])
{
if(!dfs(u))
return 0;
}
}
return 1;
}
int main()
{
int i;
while(cin>>n>>m)
{
memset(tp,0,sizeof(tp));
memset(visit,0,sizeof(visit));
for(i=0;i<m;i++)
{
cin>>u>>v;
tp[u][v]=1;
}
int k=topu();
if(k==0)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
}
return 0;
}
*/
SDUT OJ 2140 图结构练习——判断给定图是否存在合法拓扑序列
最新推荐文章于 2019-11-20 20:10:55 发布