Ankit_132

C

Aug 27th, 2023
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.20 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll     long long
  6. #define _test   int _TEST; cin>>_TEST; while(_TEST--)
  7. #define ff     first
  8. #define pb     push_back
  9.  
  10. int main()
  11. {
  12.     int n, m;
  13.     cin>>n>>m;
  14.  
  15.     vector<vector<array<int, 2>>> graph(n);
  16.  
  17.     for(int i=0; i<m; i++)
  18.     {
  19.         int a, b, c;
  20.         cin>>a>>b>>c;
  21.  
  22.         a--, b--;
  23.  
  24.         graph[a].pb({b, c});
  25.         graph[b].pb({a, c});
  26.     }
  27.  
  28.     int N = (1<<n);
  29.  
  30.     vector<vector<int>> dp(N, vector<int> (n+1, -1));
  31.  
  32.     function<int (int, int)> solve = [&](int mask, int prev)
  33.     {
  34.         if(mask+1 == N)             return 0;
  35.         if(dp[mask][prev] != -1)    return dp[mask][prev];
  36.  
  37.         dp[mask][prev] = 0;
  38.  
  39.         if(prev == 0)
  40.         {
  41.             for(int i=0; i<n; i++)
  42.                 dp[mask][prev] = max(dp[mask][prev], solve((1<<i), i+1));
  43.         }
  44.         else
  45.         {
  46.             for(auto [v, x]: graph[prev-1])
  47.             {
  48.                 if((mask & (1<<v)) != 0)        continue;
  49.                 dp[mask][prev] = max(dp[mask][prev], x + solve(mask|(1<<v), v+1));
  50.             }
  51.         }
  52.  
  53.         return dp[mask][prev];
  54.     };
  55.  
  56.     cout<<solve(0, 0)<<"\n";
  57. }
  58.  
Advertisement
Add Comment
Please, Sign In to add comment