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;
}