75pts求条
查看原帖
75pts求条
1106246
Loyal_Soldier楼主2025/6/28 10:25

rt

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5e5 + 10;
const int M = 4e6 + 10;
vector <int> p[N];
int dfn[N], low[N], st[M], top, cnt, idx;
int u[N], v[N];
int n, m, ans, deg[N];
vector <int> IDX[N];
void dfs(int x, int fa)
{
    int son = 0;
	dfn[x] = low[x] = ++ cnt;
	st[++ top] = x;
	for(auto v : p[x])
	{
		if(v == fa) continue;
		if(!dfn[v])
		{
            son ++;
			dfs(v, x);
			low[x] = min(low[x], low[v]);
            if(low[v] >= dfn[x])
            {
                deg[x] ++;
                int V = 0;
        		idx ++;
                while(st[top + 1] != v) IDX[idx].push_back(st[top --]);
                IDX[idx].push_back(x);
        	}
        }
        else low[x] = min(low[x], dfn[v]);
    }
    if(fa == 0 && son == 0) IDX[++ idx].push_back(x);
}
signed main()
{
	cin >> n >> m;
	for(int i = 1;i <= m;i ++)
	{
		cin >> u[i] >> v[i];
		p[u[i]].push_back(v[i]);
		p[v[i]].push_back(u[i]);
	}
	for(int i = 1;i <= n;i ++)
		if(!dfn[i]) dfs(i, 0), top = 0;
    cout << idx << '\n';
    for(int i = 1;i <= idx;i ++)
    {
        cout << IDX[i].size() << ' ';
        for(int j = 0;j < IDX[i].size();j ++) cout << IDX[i][j] << ' ';
        cout << '\n';
    }
	return 0;
}

Subtask #4全WA

2025/6/28 10:25
加载中...