Cod sursa(job #1390387)

Utilizator catachimerelChimerel Mihai Catalin catachimerel Data 17 martie 2015 00:15:49
Problema Componente tare conexe Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<fstream>
#include <iostream>
using namespace std;
fstream f("ctc.in", ios::in);
fstream g("ctc.out", ios::out);
long long a[10000][10000], suc[100000], pred[100000],n,m,nrc;

void citire()
{
	int x, y;
	f >> n >> m;
	for (int i = 1; i <= m; i++)
	{
		f >> x >> y;
		a[x][y] = 1;
	}
}

void dfsuc(int nod)
{
	int k;
	suc[nod] = nrc;
	for (k = 1; k <= n; k++)
		if (a[nod][k] == 1 && suc[k] == 0)
			dfsuc(k);
}
void dfpred(int nod)
{
	int k;
	pred[nod] = nrc;
	for (k = 1; k <= n; k++)
		if (a[k][nod] == 1 && pred[k] == 0)
			dfpred(k);
}

int main()
{
	for (int i = 1; i <= n; i++)
		cout << suc[i] << " " << pred[i];
	citire();
	nrc = 1;
	for (int i = 1; i <= n; i++)
		if (suc[i] == 0)
		{
			dfsuc(i);
			dfpred(i);
			for (int j = 1; j <= n; j++)
				if (suc[j] != pred[j])
					suc[j] = pred[j] = 0;
			nrc++;
		}
	g << nrc-1 << endl;
	for (int i = 1; i<nrc; i++)
	{
		for (int j = 1; j <= n; j++)
			if (suc[j] == i) g << j << " ";
		g << endl;
	}
	cin.get();
	return 0;
}