Advertisement
albnayem

Untitled

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