310
Se consideră un graf neorientat conex cu n noduri și n muchii.
Cerința
Să se determine numărul arborilor parțiali ai grafului.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n perechi de numere naturale x y reprezentând cele n muchii.
Date de ieșire
Programul va afișa pe ecran numărul arborilor parțiali ai grafului.
Restricții și precizări
1 ≤ n ≤ 30.000- cele
nmuchii sunt distincte două câte două
Exemplu
Intrare
7 1 4 1 5 2 3 2 4 4 5 4 6 4 7
Ieșire
3
Explicație
Graful din exemplu corespunde imaginii de mai jos.

Primul arbore parțial este format din muchiile: (1, 4), (2, 3), (2, 4), (4, 5), (4, 6), (4, 7).
Al doilea arbore parțial este format din muchiile: (1, 4), (1, 5), (2, 3), (2, 4), (4, 6), (4, 7).
Al treilea arbore parțial este format din muchiile: (1, 5), (2, 3), (2, 4), (4, 5), (4, 6), (4, 7).
#include <bits/stdc++.h>
using namespace std;
int n , x , y , p[50001] , cnt;
vector <int> G[50001];
queue <int> Q;
int main()
{
cin >> n;
for(int i = 1 ; i <= n ; i++)
{
cin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
p[x]++;
p[y]++;
}
for(int i = 1 ; i <= n ; i++)
if(p[i] == 1)Q.push(i);
while(!Q.empty())
{
x = Q.front();
for(int y : G[x])
if(p[y])
{
p[y]--;
if(p[y] == 1) Q.push(y);
}
p[x] = 0;
Q.pop();
}
for(int i = 1 ; i <= n ; i++)
if(p[i] == 2) cnt++;
cout <<cnt;
}
Comentarii