Cod sursa(job #1113989)

Utilizator cristi103tiron cristian cristi103 Data 21 februarie 2014 09:27:55
Problema Componente tare conexe Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<vector>
#include<bitset>
#include <fstream>
using namespace std;
ifstream fin ("ctc.in");
ofstream fout ("ctc.out");
const int nmax = 100005;
int n,m,x,y,i,tsort[nmax],cnt;
vector<int> v[nmax],vt[nmax],s[nmax];
bitset<nmax> viz;
void citire ()
{
     fin>>n>>m;
     for (i=1;i<=m;i++)
     {
         fin>>x>>y;
         v[x].push_back(y);
         vt[y].push_back(x);
         }
     }
void dfs(int x)
{
    for(vector<int>::iterator it=v[x].begin();it!=v[x].end();it++)
        if(!viz[*it]) 
        {viz[*it]=1; 
        dfs(*it);}
    tsort[++cnt]=x;
}
void dfst(int x)
{
    s[cnt].push_back(x);
    for(vector<int>::iterator it=vt[x].begin();it!=vt[x].end();it++)
        if(!viz[*it]) 
        {viz[*it]=1; 
        dfst(*it);}
}
int main ( )
{
    citire ();
    for (i=1;i<=n;i++)
    for(i=1;i<=n;i++) 
    if(!viz[i]) 
    {viz[i]=1; 
    dfs(i);} 
    viz=0; cnt=0;
    for(i=n;i;i--) 
    if(!viz[tsort[i]]) 
    {viz[tsort[i]]=1; 
    cnt++; 
    dfst(tsort[i]);}
    fout<<cnt<<"/n";
    for(i=1;i<=cnt;i++) 
   { for(vector<int>::iterator it=s[i].begin();it!=s[i].end();it++) 
    fout<<*it;
    fout<<"\n"; }
    return 0;
}