20分 悬2关
查看原帖
20分 悬2关
886208
Atwi_llljx楼主2023/8/20 11:43

4个RE

/*

1 2
1 3
1 4
2 5
2 6
3 7
4 7
4 8
7 8

1 234
2 56
3 7
4 78
5
6
7 8
8

*/
#include<bits/stdc++.h>
#define ll long long
#define MAX 0x3f3f3f3f
#define MIN -0x3f3f3f3f
using namespace std;
ll in();
int n,T;
vector<int> ve[100010];
bool dx[100010];
queue<int> q;
struct a1{
	int a,b;
	void a2(){
		a=in();
		b=in();
	}
}s[100010];
ll in(){
	ll x=1,dx=0;
	char xx=getchar();
	for(;xx<'0'||xx>'9';xx=getchar())
		if(xx=='-')
			x=-1;
	for(;xx>='0'&&xx<='9';dx=dx*10+xx-'0',xx=getchar());
	return x*dx;
}
bool a3(a1 x,a1 y){
	return x.b<y.b||(x.b==y.b&&x.a<y.a);
}
void dfs(int x){
	if(dx[x])
		return;
	cout<<x<<" ";
	dx[x]=1;
	for(int i=0;i<ve[x].size();dfs(ve[x][i]),i++);
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	n=in();
	T=in();
	for(int i=1;i<=T;s[i].a2(),i++);
	sort(s+1,s+T+1,a3);
	for(int i=1,sx=1;i<=n;i++)
		for(;s[sx].a==i;ve[i].push_back(s[sx].b),sx++);
	dfs(s[1].a);
	memset(dx,0,sizeof(dx));
	cout<<"\n";
	q.push(s[1].a);
	for(;!q.empty();){
		int xx=q.front();
		q.pop();
		if(dx[xx]==0)
			cout<<xx<<" ";
		dx[xx]=1;
		for(int i=0;i<ve[xx].size();i++)
			if(dx[ve[xx][i]]==0)
				q.push(ve[xx][i]);
	}
	return 0;
}

2023/8/20 11:43
加载中...