社区讨论
数据过水
P1656炸铁路参与者 4已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @m0f2f75f
- 此快照首次捕获于
- 2024/08/29 17:11 2 年前
- 此快照最后确认于
- 2025/11/04 22:05 4 个月前
几个月前写的代码现在看来明显是错的
申请加有重边的数据 (虽然铁路不会有重边
CPP#include <algorithm>
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int N = 1e4 + 5;
vector<int> g[N];
int n, m, tot, cnt;
int dfn[N], low[N];
pair<int, int> e[N];
void dfs(int u, int fa)
{
dfn[u] = low[u] = ++tot;
for (auto v : g[u])
{
if (!dfn[v])
{
dfs(v, u);
low[u] = min(low[u], low[v]);
if (low[v] > dfn[u]) e[++cnt] = {min(u, v), max(u, v)};
}
if (v != fa) low[u] = min(low[u], dfn[v]);
}
}
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1, u, v; i <= m; i++)
{
scanf("%d%d", &u, &v);
g[u].push_back(v), g[v].push_back(u);
}
for (int i = 1; i <= n; i++)
if (!dfn[i]) dfs(i, i);
sort(e + 1, e + cnt + 1);
for (int i = 1; i <= cnt; i++)
printf("%d %d\n", e[i].first, e[i].second);
return 0;
}
@kkksc03
回复
共 3 条回复,欢迎继续交流。
正在加载回复...