Cod sursa(job #2126663)

Utilizator andr3i_kaabAndrei Ciineanu andr3i_kaab Data 9 februarie 2018 20:21:55
Problema Componente tare conexe Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#define oo 999999999

using namespace std;

ifstream f("ctc.in");
ofstream cout("ctc.out");

int n, m, a[1001][1001], viz[1001], gr;

void dfs(int i)
{
  int j;
  viz[i]=1;

  for (j=1; j<=n; j++)
    if (a[i][j]>0 && a[j][i]>0 && viz[j]==0) dfs(j);
}

void dfs1(int i)
{
  cout<<i<<" ";
  int j;
  viz[i]=1;
  for (j=1; j<=n; j++)
    if (a[i][j]>0 && a[j][i]>0 && viz[j]==0) dfs1(j);
}

int main()
{
    int i, j, k, x, y;

    f>>n>>m;

    for (i=1; i<=m; i++)
    {
        f>>x>>y;
        a[x][y]=1;
    }

    for (k=1; k<=n; k++)
      for (i=1; i<=n; i++)
        for (j=1; j<=n; j++)
          if (i!=j && a[i][k] && a[k][j] &&(a[i][j]>a[i][k]+a[k][j] || !a[i][j]))
            a[i][j]=a[i][k]+a[k][j];

    for (i=1; i<=n; i++)
      if (viz[i]==0)
      {
          gr++;
          dfs(i);
      }

    cout<<gr<<"\n";

    for (i=1; i<=n; i++) viz[i]=0;

    for (i=1; i<=n; i++)
      if (viz[i]==0)
      {
          dfs1(i);
          cout<<"\n";
      }
    return 0;
}