一定要把整个图遍历一遍吗?这样直接变成算出来的点的答案不行吗?(有点记忆化的感觉)
#include<bits/stdc++.h>
using namespace std;
int n,m,u,v;
int ans[100010];
vector<int> a[100010];
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++){
scanf("%d%d",&u,&v);
a[v].push_back(u);
}
for (int i=n;i>=1;i--){
if (!ans[i]) ans[i]=i;
for (int j=0;j<a[i].size();j++){
if (!ans[a[i][j]]){
ans[a[i][j]]=ans[i];
}
}
}
for (int i=1;i<=n;i++) printf("%d ",ans[i]);
}