Cod sursa(job #1662948)

Utilizator robertkarolRobert Szarvas robertkarol Data 25 martie 2016 12:43:52
Problema Componente tare conexe Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
vector <int> v,a[100001],t[100001];
priority_queue <int, vector<int>,greater<int>> s[100001];
int n,m,i,k,x,y;
bool viz[100001],viz2[100001];
void df1(int p)
{
//    for(int i=1;i<=n;i++)
//        cout<<viz<<" ";
//    cout<<"\n";
//cout<<p<<" ";
    viz[p]=1; v.push_back(p);
    vector<int>::iterator i;
    for(i=a[p].begin();i<a[p].end();i++)
        if(!viz[*i])
             df1(*i);
}
void df2(int p)
{
    viz2[p]=1; s[k].push(p);
    vector<int>::iterator i;
    for(i=t[p].begin();i<t[p].end();i++)
        if(!viz2[*i]&&viz[*i])
          df2(*i);
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
        a[x].push_back(y);
        t[y].push_back(x);
    }
    vector<int>::iterator j;
//    for(i=1;i<=n;i++)
//       {
//           for(j=a[i].begin();j<a[i].end();j++)
//            cout<<*j<<" ";
//           cout<<"\n";
//       }
    for(i=1;i<=n;i++)
        if(!viz[i])
        df1(i);
    for(j=v.begin();j<v.end();j++)
        if(!viz2[*j])
        {
            k++;
            df2(*j);
        }
    fout<<k<<"\n";
    for(i=1;i<=k;i++)
    {
        while(!s[i].empty())
        {
            fout<<s[i].top()<<" ";
            s[i].pop();
        }
        fout<<"\n";
    }
    return 0;
}