社区讨论
为什么输出答案的时候一定要用栈存
P7771【模板】欧拉路径参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lobxmg1o
- 此快照首次捕获于
- 2023/10/30 04:37 2 年前
- 此快照最后确认于
- 2023/11/04 09:53 2 年前
以下边的遍历已经按照边的出点字典序排序。(如果没写错的话.......)
我原来的代码:
CPPvoid dfs(ll x){
printf("%lld ",x);
if(!head[x]) return ;
ll to=e[head[x]].to;
head[x]=e[head[x]].next;
dfs(to);
}
我原来的思路是模拟跑边,跑到一个点就输出一个点,再往下一条边跑,只要有欧拉路径应该是能遍历完的。如果我这样写的话,其实也可以不用dfs。交到luogu上只过了两个点,我也不知道这样错哪里......
后来我按照题解改,改成了下面这样:
CPPvoid dfs(ll x){
for(ll i=now[x];i<(ll)e[x].size();i=max(now[x],i+1)){
now[x]=i+1;
dfs(e[x][i]);
}
stack[++top]=x;
}
最后答案从栈弹出。
这样应该是从该点跑欧拉回路,跑完该点的回路后在栈里储存该点。(不知道我这样理解对不对)
感谢大佬为蒟蒻解答QWQ
回复
共 4 条回复,欢迎继续交流。
正在加载回复...