杭州電OJ-1285(チームランキング)


テーマリンクは出力フォーマットが間違っているので、何回かトポロジー的な順序付けの考え方を使いましたが、本テーマを書く時に一番時間がかかります.
#include
#include
#include
using namespace std;
typedef struct Node
{
    queue<int> list;//      
    int degree;//    
    int num;//       
    int is;//                
}Node;
bool operator > ( Node a,Node b) //        Node*           
{
    return a.num > b.num; //         
};
int main()
{
    priority_queuevector,greater> queue; //    
    int n,m;
    int i,j;
    Node a[500];
    int sum = 0;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
    for(int i =0;i//    
        temp.degree = 0;//      0
        temp.num = i;//               
        temp.is = 0; //        
        a[i] = temp; //    
    }
    for(int s=0;sscanf("%d %d",&i,&j); //        
        a[j-1].degree++; //       1
        a[i-1].list.push(j-1);  //                          list 
    }

    for(int s=0;s//           0           ,         ,      ,          
    {
        if(a[s].degree == 0)
        {
            a[s].is = 1;  //      
            queue.push(a[s]);//     

        }
    }

    while(!queue.empty())//        
    {
        while(queue.top().list.size()) //           
        {
            a[queue.top().list.front()].degree--;//       1
            queue.top().list.pop();//         
        }
        if(sum < n-1) //      
        {
        printf("%d ",queue.top().num+1);
        sum++;
        }
        else
        {
            printf("%d
"
,queue.top().num+1); } queue.pop(); for(int i =0;i// , 0 , { if(a[i].degree == 0 && a[i].is == 0) // 0 , { a[i].is = 1; // queue.push(a[i]);// } } } sum = 0; } }