Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define _test int _TEST; cin>>_TEST; while(_TEST--)
- #define ff first
- #define pb push_back
- int main()
- {
- int n, m;
- cin>>n>>m;
- vector<vector<array<int, 2>>> graph(n);
- for(int i=0; i<m; i++)
- {
- int a, b, c;
- cin>>a>>b>>c;
- a--, b--;
- graph[a].pb({b, c});
- graph[b].pb({a, c});
- }
- int N = (1<<n);
- vector<vector<int>> dp(N, vector<int> (n+1, -1));
- function<int (int, int)> solve = [&](int mask, int prev)
- {
- if(mask+1 == N) return 0;
- if(dp[mask][prev] != -1) return dp[mask][prev];
- dp[mask][prev] = 0;
- if(prev == 0)
- {
- for(int i=0; i<n; i++)
- dp[mask][prev] = max(dp[mask][prev], solve((1<<i), i+1));
- }
- else
- {
- for(auto [v, x]: graph[prev-1])
- {
- if((mask & (1<<v)) != 0) continue;
- dp[mask][prev] = max(dp[mask][prev], x + solve(mask|(1<<v), v+1));
- }
- }
- return dp[mask][prev];
- };
- cout<<solve(0, 0)<<"\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment