hpnq

dp dfs

Oct 7th, 2022
204
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 1e9+123
  3. #define f first
  4. #define s second
  5. #define pb push_back
  6. #define loop(x, n) for (int i = x; i < n; i++)
  7. #define bloop(x, n) for (int i = n; i >= x; i--)
  8. using namespace std;
  9. using ll = long long;
  10.  
  11. vector<vector<pair<ll, ll>>> g;
  12. vector<ll> dp;
  13. vector<int> used, ans;
  14. int n, m, s, t;
  15.  
  16. void dfs(ll u) {
  17.     used[u] = 1;
  18.     for (auto to : g[u]) {
  19.         ll v = to.f;
  20.         if(to.f == t){
  21.             return;
  22.         }
  23.         if (used[v] == 0) {
  24.             dfs(v);
  25.         }
  26.  
  27.     }
  28.     // dp[i] = min(dp[to.f]) + W;
  29.     ll minn = INF, mq = -1;
  30.     if(g[u].empty()){
  31.         minn = 0;
  32.     }
  33.     for(auto to : g[u]){
  34.         minn = min(minn, dp[to.f]);
  35.         if (minn == dp[to.f]) {
  36.             mq = to.f;
  37.         }
  38.     }
  39.     if(mq == -1){
  40.         dp[u] = 0;
  41.     }else{
  42.         dp[u] = minn + g[u][mq].s;
  43.     }
  44.  
  45.  
  46.     ans.pb(u);
  47. }
  48. void solve() {
  49.     cin >> n >> m >> s >> t;
  50.     //ans.resize(n);
  51.     g.resize(n);
  52.     used.assign(n, 0);
  53.     dp.assign(n, INF);
  54.     loop(0, m) {
  55.         int a, b, w;
  56.         cin >> a >> b >> w;
  57.         a--, b--;
  58.  
  59.         g[a].pb({b, w});
  60.     }
  61.     dfs(s);
  62.     cout << dp[s];
  63.  
  64.  
  65. }
  66.  
  67. int main() {
  68. #ifdef DEBUG
  69.  
  70.  
  71. #else
  72. #endif // DEBUG
  73.     solve();
  74.  
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment