Pagini recente » Cod sursa (job #1033018) | Cod sursa (job #889377) | Cod sursa (job #2816116) | Cod sursa (job #1487147) | Cod sursa (job #717147)
Cod sursa(job #717147)
#include<fstream>
#include<vector>
#include<algorithm>
#define NN 100001
#define pb push_back
using namespace std;
ofstream out("ctc.out");
vector<vector<int> >G;
vector<vector<int > >G1;
int v1[NN],v2[NN],n,m;
void DFS(vector<vector<int> >g,int ,int ,int *),citire();
int main()
{
citire();
int rez=0;
for(int i=1;i<=n;i++)
if(!v1[i]&&!v2[i])
{
++rez;
DFS(G,i,rez,v1);
DFS(G1,i,rez,v2);
for(int j=1;j<=n;j++)
v1[j]=v2[j]=min(v1[j],v2[j]);
}
out<<rez<<'\n';
for(int i=1;i<=rez;++i)
{
for(int j=1;j<=n;++j)
if(v1[j]==i)
out<<j<<" ";
out<<'\n';
}
return 0;
}
void citire()
{
ifstream in("ctc.in");
in>>n>>m;
G.resize(n+1);
G1.resize(n+1);
for(int i,j;m;--m)
{
in>>i>>j;
G[i].pb(j);
G1[j].pb(i);
}
}
void DFS(vector<vector<int> >g,int start ,int cul ,int v[100])
{
v[start]=cul;
for(vector<int>::iterator i=g[start].begin();i<g[start].end();++i)
if(!v[*i])
DFS(g,*i,cul,v);
}