Pagini recente » Cod sursa (job #2872343) | Cod sursa (job #473770) | Cod sursa (job #3126531) | Cod sursa (job #2983182) | Cod sursa (job #1307516)
#include <cstdint>
#include <algorithm>
#include <fstream>
#include <vector>
#include <limits>
using namespace std;
const uint32_t INF = 24000000;
int main() {
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
int n, m; fin >> n >> m;
vector<vector<uint32_t>> cost(n, vector<uint32_t>(n, INF));
for (int x, y, c; m--;) {
fin >> x >> y >> c;
cost[x][y] = c;
}
vector<vector<uint32_t>> dp(1ul << n, vector<uint32_t>(n, INF));
dp[1][0] = 0;
for (uint32_t v = 1; v < (1ul << n); v += 2)
for (int j = 1; j < n; ++j)
if ((1ul << j) & v)
for (int k = 0; k < n; ++k)
if (v & (1ul << k))
dp[v][j] = min(dp[v][j],
dp[v ^ (1ul << j)][k] + cost[k][j]);
uint32_t result = INF;
for (int k = 1; k < n; ++k)
result = min(result, dp[(1ul << n) - 1][k] + cost[k][0]);
if (result < INF) fout << result << endl;
else fout << "Nu exista solutie" << endl;
return 0;
}