Solution - P6743 [BalticOI 2014] Senior Postmen (Day2)

欧拉回路忘完了……

思路

爆搜加当前弧优化。不知道为什么能评蓝。

代码

#include <bits/stdc++.h>
#define rint register int
#define rllong register long long
#define llong long long
#define N 500005
#define M 1000006
using namespace std;

int to[M], nxt[M], head[N], gsiz = 1;
#define mkarc(u,v) (++gsiz, to[gsiz]=v, nxt[gsiz]=head[u], head[u]=gsiz)
int vis[M], ins[N], sta[M], top;
int n, m;

inline void dfs(rint u){
	for(rint i = head[u]; i; i = head[u]){
		rint v = to[i]; head[u] = nxt[i];
		if(vis[i]) continue;
		vis[i] = vis[i^1] = true;
		dfs(v);
	}
	if(ins[u]){
		while(sta[top] != u)
			printf("%d ", sta[top]), ins[sta[top]] = false, --top;
		printf("%d\n", u);
	}
	else sta[++top] = u, ins[u] = true;
}

int main(){
	scanf("%d %d", &n, &m);
	for(rint i = 1; i <= m; ++i){
		rint u, v;
		scanf("%d %d", &u, &v);
		mkarc(u, v), mkarc(v, u);
	}
	dfs(1);
	return 0;
}

posted @ 2025-05-24 21:13  Hootime  阅读(10)  评论(0)    收藏  举报