好久没切题 先上水题!
拓扑排序!
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int g[105][105];
int d[105];
int N,M;
bool Topsort()
{
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
if(g[i][j]==1)
{
d[j]++;
}
}
} for(int i=0;i<N;i++)
{
int j;
for(j=0;j<N;j++)
{
if(d[j]==0)
{
break;
}
}
if(j==N)
{
return false;
}
else
{
d[j]=-1;
for(int k=0;k<N;k++)
{
if(g[j][k]==1)
d[k]--;
}
}
}
return true; }
int main()
{
while(scanf("%d%d",&N,&M)&&N)
{
memset(g,0,sizeof(g));
memset(d,0,sizeof(d));
for(int i=0;i<M;i++)
{
int x,y;
scanf("%d%d",&x,&y);
g[x][y]=1;
}
if(Topsort())
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
}