Pagini recente » Cod sursa (job #1748289) | Cod sursa (job #745679) | Cod sursa (job #2313506) | Cod sursa (job #1701699) | Cod sursa (job #2870719)
#include <fstream>
#include <vector>
#include <deque>
#include <algorithm>
#include <climits>
#include <iomanip>
#include <cmath>
#define MOD 666013
#define INT_MAX 1000000000
using namespace std ;
ifstream cin ("ctc.in") ;
ofstream cout ("ctc.out") ;
int n, viz[100009] ;
vector<int> m[100009], rev[100009] ;
void dfs(int nod, int k)
{
if(viz[nod])return ;
viz[nod] = k ;
for(int f = 0 ; f < m[nod].size() ; f ++)
dfs(m[nod][f], k) ;
}
vector<vector<int> > rez ;
void dfs2(int nod, int k)
{
if(viz[nod] != k)return ;
viz[nod] *= -1 ;
rez.back().push_back(nod) ;
for(int f = 0 ; f < rev[nod].size() ; f ++)
dfs2(rev[nod][f], viz[nod] * -1) ;
}
int main()
{
int q ;
cin >> n >> q ;
while(q --)
{
int a, b ;
cin >> a >> b ;
m[a].push_back(b) ;
rev[b].push_back(a) ;
}
int k = 0 ;
for(int f = 1 ; f <= n ; f ++)
if(!viz[f])
dfs(f, ++ k) ;
for(int f = 1 ; f <= n ; f ++)
if(viz[f] > 0)
{
vector<int> aux ;
rez.push_back(aux) ;
dfs2(f, viz[f]) ;
}
cout << rez.size() << endl ;
for(int f = 0 ; f < rez.size() ; f ++)
{
for(int e = 0 ; e < rez[f].size() ; e ++)
cout << rez[f][e] << " " ;
cout << '\n' ;
}
return 0 ;
}
/// 1990