Cod sursa(job #2981066)

Utilizator Elvis_CostinTuca Elvis-Costin Elvis_Costin Data 17 februarie 2023 10:22:21
Problema Componente tare conexe Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
using namespace std;
string np = "ctc";
ifstream f(np + ".in");
ofstream g(np + ".out");

// #define f cin
// #define g cout

int n, m;
int val, val1[100003], val2[100003];
vector<int> adj1[100003], adj2[100003];

void dfs1(int nod, int val)
{
    val1[nod] = val;
    for (auto u : adj1[nod])
        if (val1[u] != val)
            if (!val1[u] and !val2[u] or val1[u] != val2[u])
                dfs1(u, val);
}
void dfs2(int nod, int val)
{
    val2[nod] = val;
    for (auto u : adj2[nod])
        if (val2[u] != val)
            if (!val1[u] and !val2[u] or val1[u] != val2[u])
                dfs2(u, val);
}
int main()
{
    f >> n >> m;
    for (int a, b; f >> a >> b;)
        adj1[a].push_back(b), adj2[b].push_back(a);

    for (int i = 1; i <= n; i++)
        if (!val1[i] and !val2[i] or val1[i] != val2[i])
            val++, dfs1(i, val), dfs2(i, val);

    vector<int> rez[val + 1];
    for (int i = 1; i <= n; i++)
        rez[val1[i]].push_back(i);

    g << val << '\n';
    for (int i = 1; i <= val; i++, g << '\n')
        for (auto x : rez[i])
            g << x << " ";

    return 0;
}