拓扑排序练一发,思想在poj2367中写了
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int s[10001][10001];
int in_degree[253333];
bool vis[253333];
int main()
{
int l,n,m,ans = 0;
scanf("%d%d",&n,&m);
memset(vis,0,sizeof(vis));
for(int i = 1; i <= m; i ++)
{
int a,b;
scanf("%d%d",&a,&b);
in_degree[b] ++;
s[a][b] = 1;
}
int tot = 0;
for(int i = 1; i <= n; i ++)
{
int t=0;
for(int j = 1; j <= n; j ++)
{
if(in_degree[j] == 0 && !vis[j])
{
t = j;
vis[j] = 1;
ans ++;
break;
}
}
if(t==0)
break;
for(int j = 1; j <= n; j ++)
{
if(s[t][j] == 1)
in_degree[j]--;
}
}
if((n-ans) == 0)
puts("o(∩_∩)o");
else
{
puts("T_T");
printf("%d",n-ans);
}
return 0;
}