sábado, 31 de marzo de 2012

567 - Risk, uva

 #include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<map>
#define db(a) cout << #a << " = " << a << endl
#define db2(a, b) cout << #a << " = " << a << " " #b << " = " << b << endl
#define foreach(mapa, it) for (typeof(mapa.begin()) it = mapa.begin(); it != mapa.end(); it++)
using namespace std;
map<int, vector<int> > adyacencia;
map<int, int> dist;
void bfs(int a, int b) {
 queue<int> q;
 q.push(a);
 dist.clear();
 dist[a] = 0;
 while (!q.empty()) {
  int u = q.front(); q.pop();
  if (u == b) {
   printf("%2d to %2d: %d\n", a, b, dist[b]); 
   break;
  }
  for (int i = 0; i < adyacencia[u].size(); i++) {
   if (dist.count(adyacencia[u][i])) continue;
   dist[adyacencia[u][i]] = dist[u] + 1;
   q.push(adyacencia[u][i]);
  }
 }
}
int main() {
 #ifdef dennisbot
  freopen("in.in", "r", stdin);
  freopen("ou.out", "w", stdout);
 #endif
 int n, var, ini, fin, cont = 1, ret;
 while (1) {
  adyacencia.clear();
  dist.clear();
  for (int i = 1; i < 20; i++) {
   ret = scanf("%d", &n);
   if (ret == EOF) return 0;
   for (int j = 0; j < n; j++) {
    scanf("%d", &var);
    adyacencia[i].push_back(var);
    adyacencia[var].push_back(i);
   }
  }
  scanf("%d", &n);
  printf("Test Set #%d\n", cont++);
  for (int i = 0; i < n; i++) {
   scanf("%d", &ini);
   scanf("%d", &fin);
   bfs(ini, fin);
  }
  puts("");
 }
}

No hay comentarios:

Publicar un comentario