// UVa 1056 - Degrees of Separation
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <map>
using namespace std;
int main() {
int t = 0;
int n, m;
while ((cin >> n >> m) && (n || m)) {
int nn = 0;
map<string, int> id;
int cost[51][51];
memset(cost, 127, sizeof(cost));
int oo = cost[0][0];
for (int j = 0; j < m; j++) {
string sa, sb;
cin >> sa >> sb;
if (id[sa] == 0)
id[sa] = ++nn;
if (id[sb] == 0)
id[sb] = ++nn;
cost[id[sa]][id[sb]] = 1;
cost[id[sb]][id[sa]] = 1;
}
int sol;
bool broken = false;
if (nn != n)
broken = true;
else {
for (int i = 1; i <= n; i++)
cost[i][i] = 0;
for (int k = 1; k <= n; k++)
for (int i = 1; i <= n; i++)
if (cost[i][k] != oo)
for (int j = 1; j <= n; j++)
if (cost[k][j] != oo && cost[i][j] > cost[i][k] + cost[k][j])
cost[i][j] = cost[i][k] + cost[k][j];
sol = 0;
for (int i = 1; i <= n; i++) {
for (int j = i + 1; j <= n; j++)
if (cost[i][j] > sol)
sol = cost[i][j];
if (sol == oo) {
broken = true;
break;
}
}
}
t++;
if (broken)
printf("Network %d: DISCONNECTED\n", t);
else
printf("Network %d: %d\n", t, sol);
printf("\n");
}
return 0;
}
Friday, June 12, 2015
UVa 1056 - Degrees of Separation
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment