您的位置:首页 > 其它

HDU 5154 Harry and Magical Computer 拓扑排序

2015-01-04 14:35 525 查看

Harry and Magical Computer

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 288 Accepted Submission(s): 131


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.
1≤n≤100,1≤m≤10000


The next following m lines, each line contains two numbers a b, indicates a dependencies (a, b).
1≤a,b≤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[code]/*
HDU 5154 拓扑排序 
拓扑排序,判断最后所以的点的度数是否都为0
*/
#include<iostream>
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
#define N 105
vector<int> map
;
int ru
;
int main()
{
	int m,n,a,b,i,f;
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		memset(ru,0,sizeof(ru));
		for(i=1;i<=n;i++)
			map[i].clear();
		for(i=1;i<=m;i++)
		{
			scanf("%d%d",&a,&b);
			map[b].push_back(a);
			ru[a]++;
		}
		queue<int> que;
		for(i=1;i<=n;i++)
			if(ru[i]==0)
				que.push(i);
		while(!que.empty())
		{
			a=que.front();
			que.pop();
			for(i=0;i<map[a].size();i++)
			{
				b=map[a][i];
				ru[b]--;
				if(ru[b]==0)
					que.push(b);
			}
		}
		f=1;
		for(i=1;i<=n;i++)
			if(ru[i])
			{
				f=0;
				break;
			}	
		printf("%s\n",f?"YES":"NO");
	}
	return 0;
}
[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: