// UVa 315 - Network #include <iostream> #include <sstream> #include <string.h> #include <limits.h> using namespace std; int lnk[101][101]; int counter, sol; int L[101], O[101]; void add_link(int i, int j) { lnk[i][++lnk[i][0]] = j; lnk[j][++lnk[j][0]] = i; } void dfs(int i, int p) { O[i] = ++counter; L[i] = O[i]; int children_count = 0; int biggest_children_L = 0; for (int k = 1; k <= lnk[i][0]; k++) { int j = lnk[i][k]; if (O[j] == 0) { dfs(j, i); children_count++; if (L[j] > biggest_children_L || biggest_children_L == 0) biggest_children_L = L[j]; if (L[j] < L[i]) L[i] = L[j]; } else if (j != p && j != i && O[j] < L[i]) L[i] = O[j]; } if (i != 1 && biggest_children_L >= O[i]) sol++; else if (i == 1 && children_count > 1) sol++; } int main() { string line; int n; cin >> n; getline(cin, line); while (n) { for (int i = 1; i <= n; i++) lnk[i][0] = 0; getline(cin, line); istringstream strm(line); int i; strm >> i; while (i) { int j; while (strm >> j) add_link(i, j); getline(cin, line); strm.clear(); strm.str(line); strm >> i; } counter = 0; sol = 0; memset(O, 0, sizeof(O)); memset(L, 0, sizeof(L)); dfs(1, 0); cout << sol << endl; cin >> n; getline(cin, line); } return 0; }
Sunday, June 7, 2015
UVa 315 - Network
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment