最近学STL的时候就想把以前需要手操数据结构的模板再写一遍……话不多说,模板慢慢更新,先从拓扑排序开始。
//临接表的拓扑
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<queue>
using namespace std;
queue<int>dui;
const int MAXX=10050;
inline int read()
{
int x=0,ff=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')ff=-1;ch=getchar();}
while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*ff;
}
struct node
{
int y,next,v;
}e[MAXX];
int len=0;
int lin[MAXX];
void inset(int xx,int yy,int vv)
{
e[++len].y=lin[xx];
lin[xx]=len;
e[len].next=yy;
e[len].v=vv;
}
int id[MAXX];
int n,m;
void init()
{
n=read();
m=read();
for(int i=1;i<=m;i++)
{
int x1,x2,x3;
x1=read();
x2=read();
x3=read();
id[x2]++;
inset(x1,x2,x3);
}
}
void topsort()
{
for(int i=1;i<=n;i++)
{
if(id[i]==0)
{
dui.push(i);
}
}
while(!dui.empty())
{
int te=dui.front();
cout<<te<<' ';
dui.pop();
int tn=lin[te];
for(int i=tn;i;i=e[i].y)
{
int tmp=e[i].next;
id[tmp]--;
if(id[tmp]==0)
{
dui.push(e[i].next);
}
}
}
}
int main()
{
// freopen("add.in","r",stdin);
init();
topsort();
cout<<endl;
return 0;
}