Pagini recente » Cod sursa (job #312983) | Cod sursa (job #241686) | Cod sursa (job #67626) | Cod sursa (job #3252168) | Cod sursa (job #3214367)
#include <bits/stdc++.h>
int main() {
using namespace std;
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
const int kInf = 1e9;
int n, m;
fin >> n >> m;
vector<vector<pair<int, int>>> adj(n);
vector<pair<int, int>> inv;
for(int i = 0; i < m; i++) {
int u, v, c;
fin >> u >> v >> c;
adj[u].emplace_back(v, c);
if(v == 0) {
inv.emplace_back(u, c);
}
}
int all = (1 << n) - 1;
auto minSelf = [&](int &x, int y) -> void {
if(y < x) {
x = y;
}
};
vector<vector<int>> dp(all + 1, vector<int>(n, kInf));
dp[1][0] = 0;
for(int mask = 0; mask <= all; mask++) {
for(int u = 0; u < n; u++) {
if(mask >> u & 1) {
for(const auto &[v, c]: adj[u]) {
if(!(mask >> v & 1)) {
minSelf(dp[mask | (1 << v)][v], dp[mask][u] + c);
}
}
}
}
}
int ans = kInf;
for(const auto &[u, c]: inv) {
cerr << u << '\n';
minSelf(ans, dp[all][u] + c);
}
if(ans == kInf) {
fout << "Nu exista solutie";
} else {
fout << ans;
}
return 0;
}