Cod sursa(job #3155893)

Utilizator AndreidreiGresoiu Liviu-Andrei Andreidrei Data 10 octombrie 2023 09:22:18
Problema Componente tare conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <bits/stdc++.h>
#include <cstring>
#include <cstdio>
#pragma GCC optimize ("O3")
#define din cin
#define dout out
#define pi 3.14159265359
#define sw(x,y) x^=y,y^=x,x^=y
#define bmin(a,b)((a<b)?(a):(b))
#define bmax(a,b)((a>b)?(a):(b))
#define bminify(a,b)a=bmin(a,b)
#define bmaxify(a,b)a=bmax(a,b)
#define forq(i,ii,n)for(i=ii;i<n;i++)
#define f first
#define s second
#define mod 777777777ll
#define nmax 100001
using namespace std;
typedef long long ll;
//ifstream in("ghicit.in");
//ofstream out("cuba.out");
FILE *fin=fopen("ctc.in","r");
FILE *fout=fopen("ctc.out","w");
int n,m,i,j,k,l,q[nmax],r[nmax],t[nmax],cc,z,x;
vector<int>g[nmax];char s[nmax*8];bitset<nmax>b;
void tr(int v)
{
    q[l++]=v,++z,t[v]=r[v]=z,b[v]=1;
    //printf("T %d \n %d %d",v,r[v],t[v]);
    for(auto i:g[v])
    {
        if(r[i]==0)
            tr(i),bminify(r[v],r[i]);
            else if(b[i])bminify(r[v],t[i]);
    }
    if(t[v]==r[v])
    {
        x++;
        //cout<<v<<' '<<t[v]<<' '<<r[v]<<'\n';
        while(q[l]!=v)
            b[q[--l]]=0,cc+=sprintf(s+cc,"%d ",q[l]);
        s[cc++]='\n';
    }
}
int main()
{
fscanf(fin,"%d%d",&n,&m);
for(k=0;k<m;k++)
    fscanf(fin,"%d %d",&i,&j),g[i].push_back(j);
tr(1);
fprintf(fout,"%d\n%s",x,s);
}