Advertisement
saske_7

uva_10171(meating prof.miguel).cpp

Nov 14th, 2017
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.06 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define M 999999999
  4. #define rep(i , n) for(i = 0;i < n ;i++)
  5. #define pii make_pair
  6.  
  7. map<char, int > m ;
  8. map<int , char>m_back ;
  9.  
  10. void warshall(int arr[][200] ,int num ){
  11.     int i , j , k ;
  12.     for(k =1 ; k <= num ;k++){
  13.         for(i = 1 ;i<= num ;i++ ){
  14.             for(j =  1;j<= num ; j++)
  15.             {
  16.                 if(arr[i][k] + arr[k][j] <= arr[i][j]){
  17.                     arr[i][j] = arr[i][k] + arr[k][j] ;
  18.  
  19.           }
  20.  
  21.             }
  22.     }
  23. }
  24.  
  25.  
  26. return ;
  27. }
  28. vector<char  > var ;
  29.  
  30.  
  31.  
  32. int main(){
  33.       freopen("in.txt","r",stdin);
  34.    freopen("out.txt","w",stdout);
  35. //ios_base :: sync_with_stdio(false);
  36. //cin.tie(NULL);
  37.  
  38. char  s1[3] , s2[3] ,s3[3] ,s4[3] ;
  39. int tc , i , j, k , des;
  40. int arr1[200][200] , arr2[200][200] ;
  41.     while(scanf("%d",&tc)){
  42.       if(tc == 0) break ;
  43.       m.clear() ;
  44.       m_back.clear();
  45.       rep(i , 200 ) rep(j , 200)
  46.         arr1[i][j] =  M;
  47.  
  48.       rep(i , 200 ) rep(j , 200)
  49.       arr2[i][j] =  M;
  50.  
  51.       int count  =1 , u ,v ;
  52.        while(tc--){
  53.       cin >> s1 >>s2 >>s3 >>s4 ;
  54.       cin >>des ;
  55.     if(s1[0] == 'Y'){
  56.       if(m.find(s3[0] ) == m.end()){
  57.         u = m[s3[0]] = count++;
  58.         m_back[count-1] =  s3[0];
  59.       }
  60.       else
  61.         u = m[s3[0]];
  62.  
  63.       if(m.find(s4[0] ) == m.end()) {
  64.         v = m[s4[0]] = count++;
  65.  
  66.         m_back[count-1] =  s4[0];
  67.       }
  68.       else
  69.         v = m[s4[0]];
  70.  
  71.       if(s2[0] == 'U')arr1[u][v] =  des;
  72.       else arr1[u][v] = arr1[v][u] = des;
  73.     }
  74.     else{
  75.  
  76.       if(m.find(s3[0] ) == m.end()) {
  77.         u = m[s3[0]] = count++;
  78.         m_back[count-1] =  s3[0];
  79.       }
  80.      else
  81.         u = m[s3[0]];
  82.  
  83.       if(m.find(s4[0] ) == m.end()){
  84.         v = m[s4[0]] = count++;
  85.         m_back[count-1] =  s4[0];
  86.       }
  87.       else
  88.         v = m[s4[0]];
  89.  
  90.  
  91.  
  92.       if(s2[0] == 'U') arr2[u][v] =  des;
  93.       else arr2[u][v] = arr2[v][u] = des;
  94.  
  95.     }
  96.  
  97.   }
  98.   count-- ;
  99.   rep(i , 200) arr1[i][i] = arr2[i][i] = 0;
  100.   warshall(arr1 , count );
  101.   warshall(arr2 , count );
  102. /*
  103.  for(i = 1; i <=count ;i++){
  104.     for(j = 1 ;j<= count; j++)
  105.     {
  106.       printf("%d(%d %d) ",arr2[i][j] , i, j);
  107.  
  108.     }
  109. printf("\n");
  110.  
  111.  
  112.   }
  113. */
  114.  
  115.   cin >> s1 >> s2;
  116.   u = m[s1[0]] ;
  117.    v = m[s2[0] ];
  118.     var.clear();
  119.   int min ;
  120.   min  =  M;
  121.   vector<pair<int ,int> > _hold ;
  122.     for(i =1 ; i<= count ;i++)
  123.     {
  124.       _hold.push_back(pii(arr1[u][i] + arr2[v][i],i ));
  125.       if(arr1[u][i] + arr2[v][i] < min ){
  126.         min = arr1[u][i] + arr2[v][i];
  127.       }
  128.  
  129.     }
  130.     for(i = 0 ; i< _hold.size() ; i++)
  131.       if(_hold[i].first == min ){
  132.         var.push_back(m_back[_hold[i].second]);
  133.  
  134.       }
  135. sort(var.begin() , var.end() );
  136.    if(min < M ){
  137.     printf("%d", min);
  138.     for(i = 0 ;i < var.size() ; i++)
  139.       printf(" %c",var[i]);
  140.   printf("\n");
  141.  
  142.     }
  143.     else{
  144.       if(s1[0] !=  s2[0])
  145.         printf("You will never meet.\n");
  146.       else{
  147.         var.clear();
  148.         var.push_back(s1[0]);
  149.         var.push_back(s2[0]);
  150.         sort(var.begin() , var.end());
  151.  
  152.       printf("0 %c\n",s1[0] , s2[0] ,var[0]);
  153.       }
  154.     }
  155.     }
  156.  
  157.  
  158. return 0 ;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement