原题大致上就是检测一系列进程之间是否存在循环依赖的问题,形如: a->b->c->a, a->a ,都行成了循环依赖,事实上可以视为“检测链表中是否存在环”
AC代码:
#include <iostream> #include <set> #include <cstring> using namespace std; int main() { int procs[10000]; int nProc, nDep; while( cin >> nProc >> nDep ) { memset(procs,0,10000); set<int> idSet; bool hasCircle = false; for( ; nDep>0; --nDep ) { int a, b; cin >> a >>b; idSet.insert(a); idSet.insert(b); if( a == b ) { hasCircle = true; } procs[a] = b; } if( !hasCircle ) { for( set<int>::iterator ii = idSet.begin(); ii != idSet.end(); ii++ ) { bool visit[10000] = {false}; int p = procs[*ii]; while( p && visit[p] == false ) { visit[p] = true; p = procs[p]; } if( p ) { hasCircle = true; break; } } } if( hasCircle ) { cout << "NO" << endl; }else{ cout << "YES" << endl; } } return 0; }