下面这个在dev c++上能跑,但是提交到HDU和vjudge的c++的时候报编译错误,无法识别优先队列的greater。
但是把HDU和vjudge提交的类型改为g++,就能通过了。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>

using namespace std;

const int N = 501;

int n, m;
vector<int> graph[N];
int indegree[N];
int ans[N];

void func(int n){
    //priority_queue<int, vector<int>, greater<int> > node; //存入度为0的点 
    priority_queue <int,vector<int>,greater<int> > node; 
    //queue<int> node;
    for(int i = 1; i <= n; i++){
        if(indegree[i] == 0){
            node.push(i);
            //printf("%d\n", i);
        }
    }
    int num = 0;
    while(!node.empty()){
        int u = node.top();
        //printf("%d\n", u);
        node.pop();
        ans[num++] = u;
        for(int i = 0; i < graph[u].size(); i++){
            int v = graph[u][i];
            indegree[v]--;    //后续节点入度-1 
            if(indegree[v] == 0){
                node.push(v);
                //printf("%d\n", v);
            }
        } 
    }    
}

int main(){
    int from, to;
    while(cin >> n >> m){
        if(n == 0 && m == 0) break;
        //memset(graph, 0, sizeof(graph)); 
        for(int i = 1; i <= n; i++)
            graph[i].clear();
        memset(indegree, 0, sizeof(indegree));
        while(m--){
            cin >> from >> to;
            graph[from].push_back(to); 
            indegree[to]++;
            //printf("%d\n", from);

        }    
        func(n);
        printf("%d", ans[0]);
        for(int i = 1; i < n; i++){
            printf(" %d", ans[i]);
        }
        printf("\n");
    }
    return 0;
}