P3916 图的遍历

Archie

建反图,dfs

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m;
int x,y;
struct e{
	int to;
	int ne;
} ed[100050];
int head[100005];
int p;
int vis[100005];
void add(int f,int to){
	p++;
	ed[p].to=to;
	ed[p].ne=head[f];
	head[f]=p;
}
void dfs(int x,int f){
	if(vis[x]) return;
	vis[x]=f;
	for(int i=head[x];i;i=ed[i].ne){
		dfs(ed[i].to,f);
	}
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;++i){
		scanf("%d%d",&x,&y);
		add(y,x);
	}
	for(int i=n;i>=1;--i){
		dfs(i,i);	
	}
	for(int i=1;i<=n;++i){
		cout<<vis[i]<<" ";
	}
	return 0;
}
posted @ 2021-07-28 17:27  Simex  阅读(27)  评论(0编辑  收藏  举报