abdukodir

Problem 3: Milk Routing

Dec 22nd, 2012
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<vector>
  5. #include<queue>
  6. #include<algorithm>
  7.  
  8. #define MN 1005
  9. #define INF 1000007
  10. #define pb push_back
  11. #define mp make_pair
  12. #define fr first
  13. #define se second
  14.  
  15. const double eps = 1e-12;
  16.  
  17. using namespace std;
  18.  
  19. int N, M, X, I, J, L, C, ans = INF*1000, c, u[INF];
  20. vector< pair< int, pair<int, int> > >g[MN];
  21. vector< pair<int, int> >v[MN];
  22. void Init(){
  23.     cin>>N>>M>>X;
  24.     for(int i=1; i<=M; i++){
  25.         cin>>I>>J>>L>>C;
  26.         if(I<J){
  27.             swap(I, J);
  28.         }
  29.         if(I != J){
  30.             g[I].pb( mp( J, mp(L, C) ) );
  31.         }
  32.     }
  33. }
  34. void solve(){
  35.     if(N == 1){
  36.         cout<<0<<endl;
  37.         return;
  38.     }
  39.     int i, j, k;
  40.     v[1].pb( mp(0, INF) );
  41.     for(i=2; i<=N; i++){
  42.         for(j=0; j<g[i].size(); j++){
  43.             J = g[i][j].fr;
  44.             L = g[i][j].se.fr;
  45.             C = g[i][j].se.se;
  46.             for(k=0; k<v[J].size(); k++){
  47.                 c = min(C, v[J][k].se);
  48.                 if(u[c] == 0){
  49.                     v[i].pb( mp( L+v[J][k].fr, c ) );
  50.                     u[c] = v[i].size();
  51.                 }
  52.                 else {
  53.                     v[i][ u[c]-1 ].fr = min(v[i][ u[c]-1 ].fr, L+v[J][k].fr);
  54.                 }
  55.             }
  56.         }
  57.         for(j=0; j<v[i].size(); j++){
  58.  
  59.             u[ v[i][j].se ] = 0;
  60.         }
  61.     }
  62.     for(i=0; i<v[N].size(); i++){
  63.         ans = min(ans, v[N][i].fr + X/v[N][i].se);
  64.     }
  65.     cout<<ans<<endl;
  66. }
  67. main(){
  68.     freopen("mroute.in", "r", stdin);   freopen("mroute.out", "w", stdout);
  69.     Init();
  70.     solve();
  71.     return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment