#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; }
lunes, 24 de octubre de 2011
336 - A Node Too Far - UVA
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario