社区讨论
不涉及算法的一个纯语法问题
P7771【模板】欧拉路径参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhjhwt4c
- 此快照首次捕获于
- 2025/11/04 02:50 4 个月前
- 此快照最后确认于
- 2025/11/04 02:50 4 个月前
rt,dfs跑循环的时候为什么这个代码 的时候还会继续循环啊,而且 甚至不等于 好可怕。(比如说你把样例1输进去然后观察倒数第三行)
求助
CPP#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5, M = 1e5 + 5;
int n, m;
int idx, rd[N], cd[N], h[N], e[M], ne[M];
stack<int> s;
struct node{
int u, v;
bool operator < (const node &t) const{
if(u == t.u) return v < t.v;
return u < t.u;
}
}p[N];
void add(int u, int v) {
e[++idx] = v, ne[idx] = h[u], h[u] = idx;
rd[v]++, cd[u]++;
}
void dfs(int u) {
for(int i = h[u]; i; i = ne[i]) {
cout<<i<<" "<<h[u]<<endl;
h[u] = ne[i]; //每次走完,将 h[u] 改为下一条边
printf("%d %d %d\n", u, e[i], h[u]);
dfs(e[i]);
}
s.push(u);
}
int main() {
scanf("%d %d", &n, &m);
for(int i = 1; i <= m; i++) {
int u, v;
scanf("%d %d", &p[i].u, &p[i].v);
}
int c = 0, r = 0, st = 1; // c-出度比入度大1的点的个数,r同理
for(int i = 1; i <= n; i++) {
if(abs(cd[i] - rd[i]) > 1) {
printf("No");
return 0;
}
if(cd[i] - rd[i] == 1) {
c++;
st = i;
}else if(rd[i] - cd[i] == 1) r++;
}
if((c == 0 && r == 0) || (c == 1 && r == 1)) {
sort(p+1, p+1+m);
for(int i = 1; i <= m; i++) add(p[i].u, p[i].v);
dfs(st);
while(!s.empty()) {
printf("%d ", s.top());
s.pop();
}
}else {
printf("No");
return 0;
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...