社区讨论

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 条回复,欢迎继续交流。

正在加载回复...