[UVA] 10507 - Waking up brain

Problem Statement : 10507 - Waking up brain
Source            : UVA Online Judge
Category          : Graph Theory
Algorithm         : bfs
Verdict           : Accepted
  1. #include<bits/stdc++.h>  
  2. using namespace std;  
  3. #define vi  vector<int>  
  4. #define mx 30  
  5. #define em emplace_back  
  6. vi graph[mx];  
  7. int on[mx];  
  8. int dist[mx];  
  9. int tnode,tedge;  
  10. char str[4];  
  11. set<int>used[mx];  
  12. int toint(char ch){  
  13.     return ch-'A'+1;  
  14. }  
  15. void init(){  
  16.     for(int i=0;i<mx;i++){  
  17.         graph[i].clear();  
  18.         on[i]=0;  
  19.         used[i].clear();  
  20.     }  
  21. }  
  22. int bfs(int x,int y,int z){  
  23.     on[x]=on[y]=on[z]=1;  
  24.     queue<int>q;  
  25.     q.emplace(x);  
  26.     q.emplace(y);  
  27.     q.emplace(z);  
  28.     dist[x]=dist[y]=dist[z]=0;  
  29.     int mxdist=0;  
  30.     int visit=3;  
  31.     while(!q.empty()){  
  32.         int u=q.front();  
  33.         q.pop();  
  34.         for(int v:graph[u]){  
  35.             if(on[v])continue;  
  36.   
  37.             used[v].emplace(u);  
  38.   
  39.             if(used[v].size()==3){  
  40.                 dist[v]=dist[u]+1;  
  41.                 if(dist[v]>mxdist)mxdist=dist[v];  
  42.                 on[v]=1;  
  43.                 visit++;  
  44.                 q.emplace(v);  
  45.             }  
  46.         }  
  47.     }  
  48.     if(visit<tnode) return -1;  
  49.     return mxdist;  
  50. }  
  51. int main(){  
  52.     //freopen("input.txt","r",stdin);  
  53.     //freopen("output.txt","w",stdout);  
  54.     while(cin>>tnode>>tedge){  
  55.         init();  
  56.         cin>>str;  
  57.         int x=toint(str[0]);  
  58.         int y=toint(str[1]);  
  59.         int z=toint(str[2]);  
  60.         cin.ignore();  
  61.         for(int i=1;i<=tedge;i++){  
  62.             cin>>str;  
  63.             int u=toint(str[0]);  
  64.             int v=toint(str[1]);  
  65.             graph[u].em(v);  
  66.             graph[v].em(u);  
  67.         }  
  68.         int year=bfs(x,y,z);  
  69.   
  70.         if(year==-1)cout<<"THIS BRAIN NEVER WAKES UP"<<endl;  
  71.         else cout<<"WAKE UP IN, "<<year<<", YEARS"<<endl;  
  72.     }  
  73.   
  74.     return 0;  
  75. }  

No comments:

Post a Comment