1. 程式人生 > >HDOJ 3342(拓撲排序)

HDOJ 3342(拓撲排序)

pan pac ack pop pso [] sizeof inb emp

#include <iomanip>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
#include <map>
using namespace std;
int n,m,inbug[110],sum;
vector<int>e[150
]; void topsort() { queue<int>q; for(int i=0;i<n;i++) { if(inbug[i]==0) q.push(i); } while(!q.empty()) { int now=q.front(); q.pop(); sum++; for(int i=0;i<e[now].size();i++) { if(--inbug[e[now][i]]==0) { q.push(e[now][i]); } } } }
int main(int argc, char *argv[]) { while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0) break; for(int i=0;i<=n;i++) e[i].clear(); memset(inbug,0,sizeof(inbug)); for(int i=0;i<m;i++) { int u,v; scanf(
"%d%d",&u,&v); e[v].push_back(u); inbug[u]++; } sum=0; topsort(); if(sum==n) printf("YES\n"); else printf("NO\n"); } return 0; }

HDOJ 3342(拓撲排序)