题解
2026-08-01 10:40:02
发布于:广东
#include <bits/stdc++.h>
#define rep_a(i,n) for(int i=1;i<=(n);i++)
#define rep_b(i,n) for(int i=n;i>=1;i--)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll MAXN=2e6+5;
struct EDGE{ll to;ll w;};
vector<ll> edge[MAXN];
ll deg[MAXN];
bool flag[MAXN];ll a[MAXN];ll arank;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ll n,m;
cin>>n>>m;
rep_a(i,m){
int u,v;
cin>>u>>v;
edge[u].push_back(v);
deg[v]++;
}
priority_queue<ll, vector<ll>, greater<ll> >q;
rep_a(i,n){
if(deg[i]==0){
flag[i]=1;
q.push(i);
}
}
while(!q.empty()){
ll now=q.top();
a[arank]=now;
q.pop();
for(auto next:edge[now]){
deg[next]--;
if(deg[next]==0){
q.push(next);
flag[next]=1;
}
}
}
for(int i=1;i<=arank;i){
cout<<a[i]<<' ';
}
return 0;
}
这里空空如也







有帮助,赞一个