P5318 蒟蒻疑问 dfs排序错了吗 t到下一重dfs是否会影响上一重
  • 板块灌水区
  • 楼主j_steady
  • 当前回复22
  • 已保存回复22
  • 发布时间2022/7/28 17:53
  • 上次更新2023/10/27 17:58:43
查看原帖
P5318 蒟蒻疑问 dfs排序错了吗 t到下一重dfs是否会影响上一重
559503
j_steady楼主2022/7/28 17:53
#include <bits/stdc++.h>
#define maxn 100005
#define maxm 1000005
using namespace std;
int n,m,tt[maxn],hd[maxn],ind[maxn],a[maxn],cnt,tim,vis[maxn],vis1[maxn];
struct edge{
	int v,nxt;
}e[maxm*2];
void add(int u,int v){
	e[++cnt].v = v;
	e[cnt].nxt = hd[u];
	hd[u] = cnt;
}
void dfs(int x){
	printf ("%d ",x);
	vis1[x] = 1;
	int t = 0;
	for(int i = hd[x];i;i = e[i].nxt){
		int v = e[i].v;
		if(vis1[v]) continue;
		vis1[v] = 1;
		a[++t] = v;
	}
	sort(a+1,a+t+1);
	for(int i=1;i<=t;i++){
		dfs(a[i]);
	}              
}
void bfs(int x){
	queue <int> q;
	q.push(x);
	vis[x] = 1;
	while (!q.empty()){
		int u =q.front();q.pop();
		printf ("%d ",u);
		int t = 0;
		for(int i = hd[u];i;i = e[i].nxt){
			int v = e[i].v;
			if(vis[v]) continue;
			vis[v] = 1;
			a[++t] = v;
		}
		sort(a+1,a+t+1);
		for(int i=1;i<=t;i++){
			q.push(a[i]);
		}
	}
}
int main (){
	scanf ("%d%d",&n,&m);
	for(int i=1;i<=m;i++){
		int u,v;
		scanf ("%d%d",&u,&v);
		add(u,v);
		ind[v] ++; 
	} 
	int t = 0;
	for(int i=1;i<=n;i++){
		if(!ind[i]) a[++t] = i;
	}
	sort(a+1,a+1+t);
	int fst = a[1];
	dfs(fst);
	puts("");
	memset(a,0,sizeof a);
	bfs(fst);
	return 0;
}
2022/7/28 17:53
加载中...