求助,样例过了,但只对一个点
查看原帖
求助,样例过了,但只对一个点
824268
gaofei楼主2023/6/17 21:37
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=1e5+10;
const int M=1e6+10;
int n,m,x,y;
vector<int> a[N];
struct S{
	int u,v;
}s[M];
bool cmp(S q,S w){
	if(q.u==w.u)return q.v<w.v;
	return q.u<w.u;
}
bool v[N];
void fs(int x){
	v[x]=1;
	printf("%d ",x);
	for(int i=0;i<a[x].size();i++){
		int p=a[x][i];
		if(!v[p]){
			fs(p);
		}
	}
	return;
}
int q[N],f,r;
void g(int x){
	memset(v,0,sizeof v);
	q[++r]=x;
	while(f<r){
		int k=q[++f];
		printf("%d ",k);
		for(int i=0;i<a[k].size();i++){
			int p=a[k][i];
			if(v[p]==0){
				v[p]=1;
				q[++r]=p;
			}
		}
	}
	return ;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=0;i<m;i++){
		scanf("%d%d",&x,&y);
		s[i].u=x;
		s[i].v=y;
	}
	sort(s,s+m,cmp);
	for(int i=0;i<m;i++){
		a[s[i].u].push_back(s[i].v);
	}
	fs(1);
	printf("\n");
	g(1);
	return 0;
}
2023/6/17 21:37
加载中...