求助,很清楚的解法,但是只有20分!
查看原帖
求助,很清楚的解法,但是只有20分!
1122253
kmg_is_so_cute楼主2024/3/21 20:30
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>

using namespace std;

const int N = 1000020;
int h[N], e[N * 2], ne[N * 2], idx;
int n, m;
int vs1[N];

struct sb
{
	int a, b;
}arr[N*2];

void add(int x, int y)
{
	e[idx] = y;
	ne[idx] = h[x];
	h[x] = idx++;
}


bool cmp(sb x, sb y)
{
	if (x.a == y.a) return x.b >= y.b;
	return  x.a > y.a;
}

void dfs(int u)
{
	printf("%d ", u);
	vs1[u] = 1;
	for (int i = h[u]; i != -1; i = ne[i])
	{
		int j = e[i];
		if (!vs1[j])dfs(j);	
	}
}

void bfs(int u)
{
	queue<int>q;
	vs1[u] = 1;
	q.push(u);
	printf("%d ", u);
	while (!q.empty())
	{
		int t = q.front();
		q.pop();
		for (int j = h[t]; j != -1; j = ne[j])
		{
			int k = e[j];
			if (!vs1[k])
			{
				printf("%d ", k);
				q.push(k);
				vs1[k] = 1;				
			}
		}
		
	}
}

int main()
{
	memset(h, -1, sizeof h);
	cin >> n >> m;
	for (int i = 0; i < m; i++)scanf("%d %d", &arr[i].a, &arr[i].b);
	sort(arr, arr + n, cmp);
	for (int i = 0; i < m; i++)
		add(arr[i].a, arr[i].b);
	dfs(1);
	cout << endl;
	memset(vs1, 0, sizeof vs1);
	bfs(1);
	return 0; 
}
2024/3/21 20:30
加载中...