杭州電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;
}
}