社区讨论
TLE求助
题目总版参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m1vkb86l
- 此快照首次捕获于
- 2024/10/05 10:56 去年
- 此快照最后确认于
- 2025/11/04 18:01 4 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
inline int read()
{
int s = 0, f = 1;
char c = getchar();
while (c < '0' || c > 9)
{
if (c == '-') f = -1;
c = getchar();
}
while (c >= '0' && c <= '9')
{
s = s * 10 + c - '0';
c = getchar();
}
return s * f;
}
int n, m;
vector <pair<int, int> > a[500007];
vector <int> d[500007];
int col[500007], dfn[500007], low[500007], tot, Stack[500007], top, jss;
bool vis[500007];
inline void get_col(int x)
{
int y = -1;
jss ++;
while (x != y)
{
y = Stack[top --];
vis[y] = 0;
col[y] = jss;
d[jss].push_back(y);
}
}
void dfs(int x, int fa)
{
dfn[x] = low[x] = tot ++;
Stack[top ++] = x;
vis[x] = 1;
for (int i = 0; i < a[x].size(); i ++)
{
if (a[x][i].second == fa) continue;
int v = a[x][i].first;
if (!dfn[v])
{
dfs(v, a[x][i].second), low[x] = min(low[x], low[v]);
if (low[v] > dfn[x]) get_col(v);
}
else if (vis[v]) low[x] = min(low[x], dfn[v]);
}
}
int main()
{
n = read(), m = read();
int qw, wq;
for (int i = 1; i <= m; i ++)
{
qw = read(), wq = read();
a[qw].push_back(make_pair(wq, i));
a[wq].push_back(make_pair(qw, i));
}
for (int i = 1; i <= n; i ++)
{
if (!dfn[i]) dfs(i, 0), get_col(i);
}
printf("%d\n", jss);
for (int i = 1; i <= jss; i ++)
{
printf("%d", (int)d[i].size());
for (int j = 0; j < d[i].size(); j ++)
{
printf("%d", d[i][j]);
}
puts("");
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...