【模板】拓扑序列 (模版题:XJOI P1064)

来源:互联网 发布:数据库事务是什么意思 编辑:程序博客网 时间:2024/06/05 14:18

题目描述

求AOV网的拓扑序列,输出按字典序最小的一个。

输入格式

第一行二个正整数n(节点数),m(边数)

以下m行每行一个整数对描述一条边

输出格式

AOV网的拓扑序列,按字典序最小的一个

样例输入

6 8
1 3
2 3
2 4
2 5
3 4
3 6
4 6
5 4

样例输出

1 2 3 5 4 6

#include<iostream>#include<queue>using namespace std;const int MAXM=1000000;struct XY{int to,pre;}e[MAXM];struct cmp{    bool operator ()(int &a,int &b){        return a>b;    }};int sz,n,m,xx,yy;int d[100000],las[100000];bool v[100000];priority_queue<int,vector<int>,cmp> Q;void add(int a,int b){    ++sz;e[sz].to=b;e[sz].pre=las[a];las[a]=sz;}int main(){    cin >>n>>m;    for (int i=1;i<=m;++i)        {cin >>xx>>yy;add(xx,yy);++d[yy];}    for (int i=1;i<=n;++i)        if (d[i]==0) Q.push(i);    while (!Q.empty()){        int tmp=Q.top();Q.pop();        cout <<tmp<<' ';        for (int i=las[tmp];i;i=e[i].pre){            d[e[i].to]--;            if (d[e[i].to]==0) Q.push(e[i].to);        }    }    return 0;}
原创粉丝点击