immuntasir

UVA 336

Jun 2nd, 2015
374
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.48 KB | None | 0 0
  1. #include <algorithm>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <queue>
  5. using namespace std;
  6. vector <int> ara[100000];
  7.  
  8. int bfs(int src, int leve, int node) {
  9.     queue <int> q;
  10.     q.push(src);
  11.     int visited[32700] = {0}, level[32700]={0};
  12.     visited[src] = 1;
  13.     level[src] = 0;
  14.     int ans = 0;
  15.     while (!q.empty()) {
  16.         int z = q.front();
  17.         if (level[z] <= leve && level[z] != 0) ans++;
  18.         if (level[z] > leve) {
  19.             ans--;
  20.             break;
  21.         }
  22.         for (int i = 0; i<ara[z].size(); i++) {
  23.             int cur = ara[z][i];
  24.             if (!visited[cur]) {
  25.                 level[cur] = level[z] + 1;
  26.                 visited[cur] = 1;
  27.                 q.push(cur);
  28.             }
  29.         }
  30.         q.pop();
  31.     }
  32.     return node-ans-1;
  33. }
  34.  
  35. int main() {
  36.  
  37.     int n, m, in1, in2, i,cs=0;
  38.     while (scanf("%d", &n)) {
  39.         if (n==0) return 0;
  40.  
  41.         int node=0;
  42.         for (i=0; i<n; i++) {
  43.             scanf("%d %d", &in1 , &in2);
  44.             if (ara[in1].empty()) node++;
  45.             else if (ara[in2].empty()) node++;
  46.             ara[in1].push_back(in2);
  47.             ara[in2].push_back(in1);
  48.         }
  49.         int x, y;
  50.  
  51.         while (scanf("%d %d", &x, &y)) {
  52.             if (x == 0 && y==0) break;
  53.             else printf("Case %d: %d nodes not reachable from node %d with TTL = %d.\n", ++cs, bfs(x, y, node), x, y);
  54.         }
  55.  
  56.         for (int z=0; z<100000; z++) ara[z].clear();
  57.     }
  58.     return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment