lunes, 24 de octubre de 2011

336 - A Node Too Far - UVA

#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<map>
using namespace std;
int main() {
	int from, to, nc, ttl, t = 1, llega, total_nodes;
	map< int,vector > adyacencia;
	map< int, int > dist;
	while (cin >> nc && nc) {
		adyacencia.clear();
		for (int i = 0; i < nc; i++) {
			cin >> from >> to;
			adyacencia[from].push_back(to);
			adyacencia[to].push_back(from);
		}
		total_nodes = adyacencia.size();
		while (cin >> from >> ttl) {
			if (from == 0 && ttl == 0) break;
			dist.clear();
			queue q;
			q.push(from);
			dist[from] = 0;
			while (!q.empty()) {
				int u = q.front(); q.pop();
				//printf("Visit %d, Layer %d\n", u, dist[u]);
				for (int i = 0; i < adyacencia[u].size(); i++) {
					if (!dist.count(adyacencia[u][i])) {
						dist[adyacencia[u][i]] = dist[u] + 1;
						q.push(adyacencia[u][i]);
					}
				}
			}
			llega = 0;
			for (map::iterator it = dist.begin(); it != dist.end(); it++) {
				if (it->second <= ttl) llega++;
			}
			printf("Case %d: %d nodes not reachable from node %d with TTL = %d.\n", t++, total_nodes - llega, from, ttl);
		}
	}
	return 0;
}


No hay comentarios:

Publicar un comentario