Pagini recente » Cod sursa (job #912952) | Cod sursa (job #2569078) | Cod sursa (job #2423203) | Cod sursa (job #1484524) | Cod sursa (job #3334569)
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ifstream cin{"hamilton.in"};
ofstream cout{"hamilton.out"};
int N, M;
cin >> N >> M;
vector<vector<pair<int, int>>> adj(N + 1);
for (int i = 0; i < M; i++) {
int u, v, w;
cin >> u >> v >> w;
adj[u].push_back({v, w});
}
vector<vector<vector<int>>> dp((1 << N) + 1,
vector<vector<int>>(N, vector<int>(N, 1e9)));
for (int i = 0; i < N; i++) {
dp[1 << i][i][i] = 0;
}
for (int i = 1; i < (1 << N); i++) {
for (int j = 0; j < N; j++) {
if (!((1 << j) & i))
continue;
for (auto c : adj[j]) {
if (i & (1 << c.first))
continue;
for (int k = 0; k < N; k++) {
int mask = i | (1 << c.first);
dp[mask][k][c.first] =
min(dp[mask][k][c.first], dp[i][k][j] + c.second);
}
}
}
}
int mn = 1e9;
for (int i = 0; i < N; i++) {
for (auto &c : adj[i]) {
mn = min(mn, dp[(1 << N) - 1][c.first][i] + c.second);
}
}
cout << mn << '\n';
return 0;
}
/*
4 5
0 1 3
0 2 4
1 2 2
2 3 2
3 0 5
*/