Wednesday, June 24, 2015

UVa 10243 - Fire! Fire!! Fire!!!

// UVa 10243 - Fire! Fire!! Fire!!!

#include <iostream>
#include <string.h>
using namespace std;

bool yet[1001], black[1001];
int degree[1001];
int lnk[1001][1001];

void dfs(int i) {
	yet[i] = false;
	for (int j = 0; j < degree[i]; j++) {
		int child = lnk[i][j];
		if (yet[child]) {
			dfs(child);
			if (!black[child])
				black[i] = true;
		}
	}
}

int main() {

	int n;
	cin >> n;
	while (n) {
		for (int i = 1; i <= n; i++) {
			cin >> degree[i];
			for (int j = 0; j < degree[i]; j++)
				cin >> lnk[i][j];
		}

		if (n != 1) {
			memset(yet, true, sizeof(yet));
			memset(black, false, sizeof(black));
			dfs(1);

			int sol = 0;
			for (int i = 1; i <= n; i++)
				if (black[i])
					sol++;
			cout << sol << endl;
		} else
			cout << 1 << endl;

		cin >> n;
	}

	return 0;
}

No comments:

Post a Comment