84分求调
查看原帖
84分求调
512724
wl2009_pretty_girl楼主2023/12/2 17:19
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
int n, m, book, in[N], flag[N], vis[N];
vector<int> v[N];
queue<int> q;
void dfs(int x, int fa, int last) {
	vis[x] = 1;
	printf("%d ", x);
	if (flag[x] || book) {
		for (int i = 0; i < v[x].size() - 1; i++) {
			int y = v[x][i];
			if (vis[y]) continue;
			if (i == v[x].size() - 2) dfs(y, x, v[x][i + 1]);
			else {
				int t = i + 1;
				while (t < v[x].size() - 1 && vis[v[x][t]]) t++;
				dfs(y, x, v[x][t]);
			}
		}
		return;
	}
	int tag = 0, tmp = 0;
	for (int i = 0; i < v[x].size() - 1; i++) {
		int y = v[x][i];
		if (!vis[y]) tmp = y;
		if (!vis[y] && !flag[y]) tag = y;
	}
	if (tag == tmp && last < tag) {
		book = 1;
		return;
	}
	for (int i = 0; i < v[x].size() - 1; i++) {
		int y = v[x][i];
		if (vis[y]) continue;
		if (i == v[x].size() - 2) dfs(y, x, v[x][i + 1]);
		else {
			int t = i + 1;
			while (t < v[x].size() - 1 && vis[v[x][t]]) t++;
			dfs(y, x, v[x][t]);
		}
	}
}
int main() {
	scanf("%d%d", &n, &m);
	for (int i = 1, x, y; i <= m; i++) {
		scanf("%d%d", &x, &y);
		v[x].push_back(y);
		v[y].push_back(x);
		in[x]++, in[y]++;
	}
	for (int i = 1; i <= n; i++) {
		if (in[i] == 1) {
			flag[i] = 1;
			q.push(i);
		}
	}
	while (!q.empty()) {
		int x = q.front();
		q.pop();
		for (int y : v[x]) {
			in[y]--;
			if (in[y] == 1) {
				flag[y] = 1;
				q.push(y);
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		sort(v[i].begin(), v[i].end());
		v[i].push_back(0x3f3f3f3f);
	}
	dfs(1, 0, 0x3f3f3f3f);
	return 0;
}
2023/12/2 17:19
加载中...