3 2 0 1 1 2 2 2 0 1 1 0 0 0
YES NO
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <limits.h>
#include <ctype.h>
#include <string.h>
#include <string>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <queue>
#include <stack>
#include <deque>
#include <vector>
#include <set>
#include <map>
using namespace std;
#define MAXN 600
int head[MAXN];
int into[MAXN];
//int mark[MAXN];
struct node{
int to;
int next;
}edge[600];
int main(){
int n,m;
int i,j;
while(~scanf("%d%d",&n,&m)){
if(n==0 && m==0){
break;
}
memset(into,0,sizeof(into));
memset(head,-1,sizeof(head));
int k = 0;
while(m--){
scanf("%d%d",&j,&i);
edge[k].to = i;
edge[k].next = head[j];
head[j] = k++;
into[i]++;
}
queue<int>t;
for(i=0;i<n;i++){
if(into[i] == 0){
t.push(i);
}
}
int count = 0;
while(!t.empty()){
int u = t.front();
count++;
t.pop();
for(k=head[u];k!=-1;k=edge[k].next){
if(--into[edge[k].to] == 0){//--的位置注意
t.push(edge[k].to);
}
}
}
if(count == n){
printf("YES\n");
}
else{
printf("NO\n");
}
}
return 0;
}
原文:http://blog.csdn.net/zcr_7/article/details/39901123