# PBinfo #4154 – ComponenteTC – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Cerința
Se dă un graf orientat cu n noduri. Să se determine câte componente tare conexe ale grafului sunt formate dintr-un singur nod.

Date de intrare
Programul citește de la tastatură numărul n de noduri și numărul m de arce, iar apoi lista arcelor, formată din m perechi de forma i j, cu semnificația că există arc orientat de la nodul i la nodul j.

Date de ieșire
Programul va afișa pe ecran numărul C de componente tare conexe formate dintr-un singur nod.

Restricții și precizări

1 ≤ n ≤ 100

Exemplu:
Intrare

5 7
1 2
2 3
3 2
3 4
4 2
5 1
5 4
Ieșire

2
Explicație
Sunt trei componente tare conexe sunt: 1, 2 3 4 și 5. Cele două componente formate dintr-un singur nod sunt 1 și 5.

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
using namespace std;
int n , A[105][105], C[105] , v[105], vT[105], nrC;
int F[105];
void Dfs(int x)
{
	v[x] = 1;
	for(int i = 1 ; i <= n ; i ++)
		if(v[i] == 0 && A[x][i] == 1)
			Dfs(i);
}
void DfsT(int x)
{
	vT[x] = 1;
	for(int i =1 ; i <= n ; i ++)
		if(vT[i] == 0 && A[i][x] == 1)
			DfsT(i);
}
int main()
{
    int i , j , m;
    cin >> n >> m;
    while( m )
    {
    	cin >> i >> j;
    	A[i][j] = 1;
    	m --;
    }
	for(int i = 1 ; i <= n ; ++i)
		if(C[i] == 0)
		{
			for(int j = 1; j <= n ; ++j)
				v[j] = vT[j] = 0;
			nrC ++;
			Dfs(i); DfsT(i);
			for(int j = 1; j <= n ; ++j)
				if(v[j] == 1 && vT[j] == 1)
					C[j] = nrC;
		}
	for(int i = 1 ; i <= n ; i ++)
		F[C[i]] ++;
	int cnt = 0;
	for(int i = 1 ; i <= nrC ; i ++)
		if(F[i] == 1)
			cnt ++;
	cout << cnt << endl;
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/4154)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/4154/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-4154/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
