Pagini recente » Cod sursa (job #2282400) | bancnote | Cod sursa (job #2527896)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
const int N = 100010;
int n,m,componente,viz[N];
vector<int> G[N],GT[N],C[N];//GT=graf transpus,G=cel initial
//bitset<N> viz;
stack<int> st;
void dfs(int),dfsGT(int);
int main()
{
f>>n>>m;
for(;m;m--)
{
int x,y;
f>>x>>y;
G[x].push_back(y);
GT[y].push_back(x);
}
for(int i=1;i<=n;i++)
if(!viz[i])
dfs(i);
while(st.size())
{
int nodc=st.top();
if(viz[nodc]==1)
{
componente++;
dfsGT(nodc);
}
st.pop();
}
g<<componente<<'\n';
for(int i=1;i<=n;i++)
{
for(auto it:C[i])
g<<it<<' ';
g<<'\n';
}
return 0;
}
void dfs(int nod)
{
viz[nod]=1;
for(auto vec:G[nod])
if(!viz[vec])
dfs(vec);
st.push(nod);
}
void dfsGT(int nod)
{
viz[nod]=2;
C[componente].push_back(nod);
for(auto vec:GT[nod])
if(viz[vec]==1)
dfsGT(vec);
}