社区讨论

灵异现象,stack 模版报RE

灌水区参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lzmqg5k6
此快照首次捕获于
2024/08/09 21:18
2 年前
此快照最后确认于
2024/08/09 22:44
2 年前
查看原帖
STL 模版存访问点的顺序报 RE,改成手写栈 AC

RE 代码

C
#include <cstdio>
#include <algorithm>
#include <stack>
const int MAXN = 1e5, MAXM = 5e5;
int n, m;

int cnt, head[MAXN + 5];
struct node {
    int v, n;
} e[2 * MAXM + 5];
void add(int u, int v) {
    e[++cnt] = {v, head[u]};
    head[u] = cnt;
}

int start[MAXN + 5];
std::stack<int> res;
bool vis[2 * MAXM + 5];
void dfs(int p) {
    for (int i = head[p]; i; i = e[i].n) {
        if (vis[i]) { continue; }
        vis[i] = true;
        dfs(e[i].v);
    }
    // STL 模版
    res.push(p);    
}
int main() {
    scanf("%d%d", &n, &m);
    int u, v;
    for (int i = 1; i <= m; i++) {
        scanf("%d%d", &u, &v);
        add(u, v); add(v, u);
    }
    dfs(1);
    while (!res.empty()) {
        printf("%d\n", res.top());
        res.pop();
    }
    return 0;
}

AC 代码

C
#include <cstdio>
#include <algorithm>
const int MAXN = 1e4, MAXM = 5e4;
int n, m;

int cnt, head[MAXN + 5];
struct node {
    int v, n;
} e[2 * MAXM + 5];
void add(int u, int v) {
    e[++cnt] = {v, head[u]};
    head[u] = cnt;
}

int start[MAXN + 5], ans[2 * MAXM + 5];
bool vis[2 * MAXM + 5];
void dfs(int p) {
    for (int i = head[p]; i; i = e[i].n) {
        if (vis[i]) { continue; }
        vis[i] = true;
        dfs(e[i].v);
    }
    // 此处改为手写栈
    ans[++ans[0]] = p;
}
int main() {
    scanf("%d%d", &n, &m);
    int u, v;
    for (int i = 1; i <= m; i++) {
        scanf("%d%d", &u, &v);
        add(u, v); add(v, u);
    }
    dfs(1);
    for (int i = ans[0]; i >= 1; i--) {
        printf("%d\n", ans[i]);
    }
    return 0;
}
有人知道为什么吗

回复

2 条回复,欢迎继续交流。

正在加载回复...