动态数组存边,反向连边,bfs
#include<bits/stdc++.h>
using namespace std;
int n,m,u,v;
vector<int>vt[100001];
queue<int>q;
bool vis[100001];
int maxn[100001];
int main(){
ios::sync_with_stdio(0);
cin>>n>>m;
while(m--){
cin>>u>>v;
vt[v].push_back(u);
}
for(int i=n;i>=1;i--){
if(maxn[i])continue;
q.push(i);
memset(vis,0,n);
vis[i]=1;
while(!q.empty()){
u=q.front();
maxn[u]=i;
q.pop();
for(int j=0;j<vt[u].size();j++){
if(!vis[vt[u][j]]){
vis[vt[u][j]]=1;
q.push(vt[u][j]);
}
}
}
}
for(int i=1;i<=n;i++)cout<<maxn[i]<<" ";
}
记录
还有,我12月21日发的,一点开发现主页出问题了,你们有吗?