Alex_tz307

1210. Kind Spirits - Timus

Nov 4th, 2020 (edited)
290
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.28 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define INF 0x3f3f3f3f
  3.  
  4. using namespace std;
  5.  
  6. inline void min_self(int& a, int b) {
  7.     a = min(a, b);
  8. }
  9.  
  10. int main() {
  11.     ios_base::sync_with_stdio(false);
  12.     cin.tie(nullptr);
  13.     cout.tie(nullptr);
  14.     int N;
  15.     cin >> N;
  16.     int cost[32][32][32], inLevel[32];
  17.     vector < int > v[32][32];
  18.     for(int i = 1; i <= N; ++i) {
  19.         int K;
  20.         cin >> K;
  21.         inLevel[i] = K;
  22.         for(int j = 1; j <= K; ++j)
  23.             while(true) {
  24.                 int a, b;
  25.                 cin >> a;
  26.                 if(a == 0)
  27.                     break;
  28.                 cin >> b;
  29.                 v[i][j].push_back(a);
  30.                 cost[i][j][a] = b;
  31.             }
  32.         if(i == N)
  33.             break;
  34.         char x;
  35.         cin >> x;
  36.     }
  37.     vector < vector < int > > d(32, vector < int >(32, INF));
  38.     d[0][1] = 0;
  39.     for(int i = 1; i <= N; ++i)
  40.         for(int j = 1; j <= inLevel[i]; ++j)
  41.             for(int k = 0; k < (int)v[i][j].size(); ++k) {
  42.                 int x = v[i][j][k];
  43.                 if(d[i][j] > d[i - 1][x] + cost[i][j][x])
  44.                     d[i][j] = d[i - 1][x] + cost[i][j][x];
  45.             }
  46.     int ans = INF;
  47.     for(int i = 1; i <= inLevel[N]; ++i)
  48.         min_self(ans, d[N][i]);
  49.     cout << ans;
  50. }
  51.  
Advertisement
Add Comment
Please, Sign In to add comment