静态数组:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll nn=1e5+10;
queue<ll> q;
ll n,m,k,idx,h[nn],vtx[2*nn],nxt[2*nn],in[nn],ans[nn];
void add(ll u,ll v) {
vtx[++idx]=v;
nxt[idx]=h[u];
h[u]=idx;
}
void bfs() {
for(ll i=1; i<=n; i++) {
if(in[i]==0) q.push(i);
}
while(!q.empty()) {
ll u=q.front();
q.pop();
ans[++k]=u;
for(ll i=h[u];i!=-1;i=nxt[i]) {
ll v=vtx[i];
in[v]--;
if(in[v]==0) q.push(v);
}
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
memset(h,-1,sizeof(h));
cin>>n>>m;
for(ll i=1; i<=m; i++) {
ll a,b;
cin>>a>>b;
add(a,b);
in[b]++;
}
bfs();
if(k==n) {
for(ll i=1;i<=n;i++) cout<<ans[i]<<" ";
} else cout<<-1;
return 0;
}
vector:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll nn=1e5+10;
queue<ll> q;
vector<ll> g[nn];
ll n,m,k,in[nn],ans[nn];
void bfs() {
for(ll i=1; i<=n; i++) {
if(in[i]==0) q.push(i);
}
while(!q.empty()) {
ll u=q.front();
q.pop();
ans[++k]=u;
for(auto v:g[u]) {
in[v]--;
if(in[v]==0) q.push(v);
}
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(ll i=1; i<=m; i++) {
ll a,b;
cin>>a>>b;
g[a].push_back(b);
in[b]++;
}
bfs();
if(k==n) {
for(ll i=1;i<=n;i++) cout<<ans[i]<<" ";
} else cout<<-1;
return 0;
}