Advertisement
albnayem

Untitled

Jun 26th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. //Country Roads (LOJ 1002)
  2. // Array implementation
  3.  
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6.  
  7. int final_minimum=INT_MAX;
  8. int adj[505][505];
  9.  
  10. void find_maximum_cost(vector <int>& path)
  11. {
  12.     int mx=INT_MIN;
  13.     //cout<<path[0]<<" ";
  14.  
  15.     for (int i = 1; i < path.size(); i++)
  16.     {
  17.         mx=max(mx,adj[path[i]][path[i-1]]);
  18.         //cout<<adj[path[i]][path[i-1]]<<" ";
  19.     }
  20.     //cout<<endl;
  21.  
  22.     final_minimum=min(final_minimum,mx);
  23. }
  24.  
  25. int isNotVisited(int x, vector <int>& path)
  26. {
  27.     int size = path.size();
  28.     for (int i = 0; i < size; i++)
  29.         if (path[i] == x)
  30.             return 0;
  31.     return 1;
  32. }
  33.  
  34. void findpaths(int src,int dst,int n)
  35. {
  36.     queue< vector <int> > q;
  37.  
  38.     vector <int> path;
  39.     path.push_back(src);
  40.     q.push(path);
  41.  
  42.     while (!q.empty()) {
  43.         path = q.front();
  44.         q.pop();
  45.         int last = path[path.size() - 1];
  46.  
  47.         if (last == dst)
  48.             find_maximum_cost(path);
  49.  
  50.         for (int i = 0; i < n; i++)
  51.         {
  52.             if ( adj[last][i] && isNotVisited(i, path))
  53.             {
  54.                 vector <int> newpath(path);
  55.                 newpath.push_back(i);
  56.                 q.push(newpath);
  57.             }
  58.         }
  59.     }
  60. }
  61.  
  62.  
  63. int main()
  64. {
  65.     int test_case;
  66.     cin>>test_case;
  67.  
  68.     for (int t=1;t<=test_case;t++)
  69.     {
  70.         int n,m;
  71.         cin>>n>>m;
  72.  
  73.         for (int i=0;i<=n;i++)
  74.             for (int j=0;j<=n;j++)
  75.                 adj[i][j]=0;
  76.  
  77.         for (int i=0;i<m;i++)
  78.         {
  79.             int a,b,c;
  80.             cin>>a>>b>>c;
  81.  
  82.             if (adj[a][b]==0) adj[a][b]=c;
  83.             else adj[a][b]=min(adj[a][b],c);
  84.             if (adj[b][a]==0) adj[b][a]=c;
  85.             else adj[b][a]=min(adj[b][a],c);
  86.         }
  87.  
  88.         int src;
  89.         cin>>src;
  90.  
  91.         cout<<"Case "<<t<<":"<<endl;
  92.  
  93.         for (int i=0;i<n;i++)
  94.         {
  95.             if (i==src) {cout<<0<<endl;continue;}
  96.             findpaths(src, i, n);
  97.             if (final_minimum==INT_MAX) {cout<<"Impossible"<<endl;continue;}
  98.             cout<<final_minimum<<endl;
  99.             final_minimum=INT_MAX;
  100.         }
  101.  
  102.  
  103.         /*for (int i=0;i<n;i++)
  104.         {
  105.             for (int j=0;j<n;j++)
  106.                 cout<<adj[i][j]<<" ";
  107.             cout<<endl;
  108.         }*/
  109.  
  110.  
  111.     }
  112.  
  113.  
  114.     return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement