Pagini recente » Cod sursa (job #1012420) | Cod sursa (job #2783515) | Cod sursa (job #621723) | Cod sursa (job #2720773) | Cod sursa (job #3030382)
#include <bits/stdc++.h>
using ll=long long;
#define S second
#define F first
#define endl '\n'
#define spid ios_base::sync_with_stdio(false);cin.tie(NULL);
const int mod=1e9+7;
const double pi=3.14159265359;
const int maxn=100001;
using namespace std;
int n,m,chk[maxn],id[maxn];
vector<vector<int>> A(maxn,vector<int>()),B(maxn,vector<int>());
vector<int> L;
void dfs1(int i){
chk[i]=1;
for(int j=0;j<A[i].size();j++){
if(!chk[A[i][j]])dfs1(A[i][j]);
}
L.push_back(i);
}
void dfs2(int i,int comp){
chk[i]=0;
id[i]=comp;
for(int j=0;j<B[i].size();j++){
if(chk[B[i][j]])dfs2(B[i][j],comp);
}
}
int main(){
ifstream cin("ctc.in");
ofstream cout("ctc.out");
cin>>n>>m;
for(int i=0;i<m;i++){
int c1,c2;
cin>>c1>>c2;
c1--;
c2--;
A[c1].push_back(c2);
B[c2].push_back(c1);
}
for(int i=0;i<n;i++){
if(!chk[i])dfs1(i);
}
int cnt=1;
for(int i=n-1;i>=0;i--){
if(chk[L[i]]){
dfs2(L[i],cnt);
cnt++;
}
}
//cout<<endl;
//for(int i=0;i<n;i++)cout<<L[i]<<" ";
//for(int i=0;i<n;i++)cout<<id[i]<<" ";
cout<<cnt-1<<endl;
vector<pair<int,int>> C;
for(int i=0;i<n;i++){
C.push_back({id[i],i});
}
sort(C.begin(),C.end());
int curr=1;
for(int i=0;i<n;i++){
if(C[i].F!=curr){
cout<<endl;
curr=C[i].F;
}
cout<<C[i].S+1<<" ";
}
}