Saturday, February 2, 2019

[UVA] 10507 - Waking up brain

Author            : Dipu Kumar Mohanto 
                    CSE, Batch - 6
                    BRUR.
Problem Statement : 10507 - Waking up brain
Source            : UVA Online Judge
Category          : Graph Theory
Algorithm         : bfs
Verdict           : Accepted

  1. #include "bits/stdc++.h"  
  2.   
  3. using namespace std;  
  4.   
  5. #define vi                vector <int>  
  6. #define em                emplace_back  
  7.   
  8. static const int maxn = 30;  
  9.   
  10. vi graph[maxn];  
  11. int on[maxn], dis[maxn];  
  12. int tnode, tedge;  
  13. char s[5];  
  14. set <int> used[maxn];  
  15.   
  16. void init()  
  17. {  
  18.     for (int i = 0; i < maxn; i++)  
  19.     {  
  20.         graph[i].clear();  
  21.         on[i] = 0;  
  22.         used[i].clear();  
  23.     }  
  24. }  
  25.   
  26. int toint(char ch)  
  27. {  
  28.     return ch - 'A' + 1;  
  29. }  
  30.   
  31. int bfs(int x, int y, int z)  
  32. {  
  33.     on[x] = on[y] = on[z] = 1;  
  34.     queue <int> PQ;  
  35.     PQ.emplace(x);  
  36.     PQ.emplace(y);  
  37.     PQ.emplace(z);  
  38.     dis[x] = dis[y] = dis[z] = 0;  
  39.     int maxdis = 0;  
  40.     int vis = 3;  
  41.     while (!PQ.empty())  
  42.     {  
  43.         int u = PQ.front(); PQ.pop();  
  44.         for (int v : graph[u])  
  45.         {  
  46.             if (on[v]) continue;  
  47.             used[v].emplace(u);  
  48.             if (used[v].size() == 3)  
  49.             {  
  50.                 dis[v] = dis[u] + 1;  
  51.                 if (dis[v] > maxdis) maxdis = dis[v];  
  52.                 on[v] = 1;  
  53.                 vis++;  
  54.                 PQ.emplace(v);  
  55.             }  
  56.         }  
  57.     }  
  58.     if (vis < tnode) return -1;  
  59.     return maxdis;  
  60. }  
  61.   
  62. int main()  
  63. {  
  64.     while (scanf("%d", &tnode) == 1)  
  65.     {  
  66.         init();  
  67.         scanf("%d", &tedge);  
  68.         scanf("%s", s);  
  69.         int x = toint(s[0]);  
  70.         int y = toint(s[1]);  
  71.         int z = toint(s[2]);  
  72.         for (int e = 1; e <= tedge; e++)  
  73.         {  
  74.             scanf("%s", s);  
  75.             int u = toint(s[0]);  
  76.             int v = toint(s[1]);  
  77.             graph[u].em(v);  
  78.             graph[v].em(u);  
  79.         }  
  80.         int year = bfs(x, y, z);  
  81.         if (year == -1) printf("THIS BRAIN NEVER WAKES UP\n");  
  82.         else printf("WAKE UP IN, %d, YEARS\n", year);  
  83.     }  
  84. }  

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.