Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 499    Accepted Submission(s): 233


Problem Description
In reward of being yearly outstanding magic student, Harry gets a magical computer. When the computer begins to deal with a process, it will work until the ending of the processes. One day the computer got n processes to deal with. We number the processes from 1 to n. However there are some dependencies between some processes. When there exists a dependencies (a, b), it means process b must be finished before process a. By knowing all the m dependencies, Harry wants to know if the computer can finish all the n processes.
 

 

Input
There are several test cases, you should process to the end of file.
For each test case, there are two numbers n m on the first line, indicates the number processes and the number of dependencies. n
 

 

Output
Output one line for each test case.
If the computer can finish all the process print "YES" (Without quotes).
Else print "NO" (Without quotes).
 

 

Sample Input
3 2 3 1 2 1 3 3 3 2 2 1 1 3
 

 

Sample Output
YES NO

 

 

#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 100001
const int inf=0x7fffffff;   //无限大 
int map[101][101];
int vis[101];
int flag[101];
int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        memset(map,0,sizeof(map));
        memset(vis,0,sizeof(vis));
        memset(flag,0,sizeof(flag));
        int a,b;
        for(int i=0;i<m;i++)
        {
            cin>>a>>b;
            map[b-1][a-1]=1;
            flag[a-1]=1;
        }
        queue<int> q;
        for(int i=0;i<n;i++)
        { 
            if(flag[i]==0)
            {
                q.push(i);
                vis[i]=1;
            }
        }
        int now;
        int next;
        while(!q.empty())
        {
            now=q.front();
            for(int i=0;i<n;i++)
            {
                if(map[now][i]==1)
                {
                    if(vis[i]==1)
                        continue;
                    q.push(i);
                    vis[i]=1;
                }
            }
            q.pop();
        }
        int flag1=0;
        for(int i=0;i<n;i++)
        {
            if(vis[i]==0)
            {
                flag1=1;
                break;
            }
        }
        if(flag1==1)
            cout<<"NO"<<endl;
        else
            cout<<"YES"<<endl;
    }
}

 

相关文章:

  • 2021-10-08
  • 2021-07-10
  • 2021-11-17
  • 2022-12-23
  • 2021-12-05
  • 2022-12-23
  • 2021-09-17
  • 2022-02-03
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-02-25
  • 2021-11-26
  • 2022-12-23
  • 2022-02-28
  • 2022-12-23
相关资源
相似解决方案