[wikioi]奇怪的梦境

http://wikioi.com/problem/2833/

拓扑排序,居然1A,哈哈。

#include <cstdio>

#include <iostream>

#include <algorithm>

#include <vector>

#include <queue>

#include <memory.h>

#define MAX(a, b) a>b?a:b

#define LEN 105

using namespace std;

 

int main()

{

    int n, m;

    scanf("%d%d", &n, &m);

    vector<vector<int> > graph(n+1);

    vector<int> indegree(n+1);

    vector<bool> visit(n+1);

    int ans = n;

    while (m--) {

        int x = 0;

        int y = 0;

        scanf("%d%d", &x, &y);

        indegree[y]++;

        graph[x].push_back(y);

    }

    queue<int> que;

    for (int i = 1; i <= n; i++) {

        if (indegree[i] == 0) {

            que.push(i);

            visit[i] = true;

            ans--;

        }

    }

    while (!que.empty()) {

        int node = que.front();

        que.pop();

        for (int i = 0; i < graph[node].size(); i++) {

            if (!visit[graph[node][i]]) {

                indegree[graph[node][i]]--;

                if (indegree[graph[node][i]] == 0) {

                    que.push(graph[node][i]);

                    visit[graph[node][i]] = true;

                    ans--;

                }

            }

        }

    }

    if (ans == 0) puts("o(∩_∩)o\n");

    else {

        puts("T_T\n");

        printf("%d\n", ans);

    }

    return 0;

}

  

你可能感兴趣的:(IO)