题目传送门:https://www.luogu.com.cn/problem/P3916
#include<iostream> #include<bits/stdc++.h> using namespace std; const int maxn=100010; int n,m,a[maxn]; vector<int> g[maxn]; void dfs(int x,int d){ if(a[x]) return; a[x]=d; for(int i=0;i<g[x].size();i++){ dfs(g[x][i],d); } } int main(){ int u,v; cin>>n>>m; for(int i=1;i<=m;i++){ cin>>u>>v; g[v].push_back(u);//反向存储 } for(int i=n;i;i--) dfs(i,i); for(int i=1;i<=n;i++) printf("%d ",a[i]); cout<<endl; return 0; }
来源:https://www.cnblogs.com/ssxzwwsjz/p/12288237.html