Pagini recente » Cod sursa (job #1296182) | Diferente pentru problema/ecexp intre reviziile 8 si 11 | Cod sursa (job #1548853) | Cod sursa (job #3150301) | Cod sursa (job #3314333)
#include <bits/stdc++.h>
using namespace std;
int main() {
#ifndef LOCAL
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
freopen("hamilton.in", "r", stdin);
freopen("hamilton.out", "w", stdout);
#endif
size_t N;
size_t M;
cin >> N >> M;
vector<vector<pair<int, int>>> G(N);
for (; M--;) {
int u;
int v;
int c;
cin >> u >> v >> c;
G[v].emplace_back(c, u);
}
vector<vector<int>> D(1 << 18, vector<int>(N, INT_MAX));
D[1][0] = 0;
for (size_t q = 1; q < (1 << N); ++q) {
for (size_t v = 0; v < N; ++v) {
if ((q >> v) & 1) {
for (auto const& [c, u] : G[v]) {
if (((q >> u) & 1)) {
if (D[q ^ (1 << v)][u] != INT_MAX)
D[q][v] = min(D[q][v], D[q ^ (1 << v)][u] + c);
}
}
}
}
}
int x = INT_MAX;
for (auto const& [c, u] : G[0]) {
if (D[(1 << N) - 1][u] != INT_MAX) {
x = min(x, D[(1 << N) - 1][u] + c);
}
}
if (x == INT_MAX) {
cout << "Nu exista solutie";
} else {
cout << x;
}
cout << '\n';
return 0;
}