Pagini recente » Profil gazpirce | Istoria paginii utilizator/ana-maria98 | Cod sursa (job #1238866) | Cod sursa (job #1453433) | Cod sursa (job #840970)
Cod sursa(job #840970)
#include <fstream>
#include <vector>
using namespace std;
vector <int> V[100005],Vt[100005];
int n,m,nrc,x,y;
int succesor[100005], predecesor[100005];
ifstream f("ctc.in");
ofstream g("ctc.out");
void dfs1(int nod){
succesor[nod] = nrc;
for(vector<int>::iterator it = V[nod].begin();it!=V[nod].end();it++){
if(!succesor[(*it)])
dfs1(*it);
}
}
void dfs2(int nod){
predecesor[nod] = nrc;
for(vector<int>::iterator it = Vt[nod].begin();it != Vt[nod].end();it++)
if(!predecesor[(*it)])
dfs2(*it);
}
int main(){
f >> n >> m;
for(int i=1;i<=m;i++){
f >> x >> y;
V[x].push_back(y);
Vt[y].push_back(x);
}
nrc = 1;
for(int i=1;i<=n;i++)
if(!succesor[i]){
succesor[i] = nrc;
dfs1(i); dfs2(i);
for(int j=1;j<=n;j++)
if(succesor[j] != predecesor[j])
succesor[j] = predecesor[j] = 0;
nrc++;
}
g << nrc -1 << '\n';
for(int i=1;i<nrc;i++){
for(int j=1;j<=n;j++){
if(i == succesor[j])
g << j << " ";
}
g << '\n';
}
f.close();
g.close();
return 0;
}