fbpx

Problema #126 – DMax – Rezolvari PBInfo

de Mihai-Alexandru

Se considerã un graf neorientat conex cu n vârfuri, numerotate de la 1 la n, şi m muchii. Definim distanţa minimă între două noduri x şi y ca fiind numărul minim de muchii al unui lanţ elementar care uneşte x cu y.

Cerinţa

Sã se determine nodul aflat la cea mai mare distanţã minimă faţã de nodul 1.

Date de intrare

Fişierul de intrare dmax.in conţine pe prima linie două numere n şi m, reprezentând numărul de noduri, respectiv numărul de muchii. Fiecare dintre urmãtoarele m linii va conţine câte două numere x şi y, separate printr-un spaţiu, cu semnificaţia: existã o muchie între nodul x şi nodul y.

Date de ieşire

Fişierul de ieşire dmax.out va conţine pe prima linie numărul z, prin care este identificat nodul aflat la cea mai mare distanţã minimă faţã de nodul 1.

Restricţii şi precizări

  • 0 < n < 100
  • 0 < m < 1000
  • Dacă există mai multe noduri aflate la distanţa maximă, poate fi ales oricare dintre ele.

Exemplu

dmax.in

6 7
1 3
1 2
2 3
2 4
3 4
4 5
5 6

dmax.out

6

Explicație

Nodul 6 se află la distanţa minimă 4 faţă de nodul 1.

#include <bits/stdc++.h>

using namespace std;

ifstream cin("dmax.in");
ofstream cout("dmax.out");

int n , m , x , y , a[101][101] , v[101] , nrc , d[101] , maxi , rez;

void bfs(int x)
{
    v[x] = 1;
    d[x] = 1;
    queue <int> Q;
    Q.push(x);
    while(!Q.empty())
    {
        int aux = Q.front();
        Q.pop();
        for(int i = 1 ; i <= n ; i++)
            if(!v[i] && a[aux][i] == 1)
            {
                v[i] = 1;
                Q.push(i);
                d[i] = d[aux] + 1;
            }
    }

}

int main()
{
    cin >> n >> m;

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

    bfs(1);

    for(int i = 1 ; i <= n ; i++)
        if(d[i] > maxi) maxi = d[i] , rez = i;

    cout << rez;
}
Comentarii

S-ar putea sa iti placa