Pagini recente » Cod sursa (job #157142) | Cod sursa (job #1644955) | Cod sursa (job #1987482) | Cod sursa (job #2435644) | Cod sursa (job #2833359)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
vector<vector<pair<long long, long long>>> g;
vector<vector<long long>> dp;
int n, m;
long long solve(long long mask, long long node) {
if (dp[mask][node] != INT_MAX) {
return dp[mask][node];
}
for (auto i : g[node]) {
if (mask & (1ll << i.first)) {
dp[mask][node] = min(dp[mask][node], solve(mask ^ (1ll << node), i.first) + i.second);
}
}
return dp[mask][node];
}
int main() {
fin >> n >> m;
g.resize(n);
for (int i = 1; i <= m; ++i) {
long long x, y, cost;
fin >> x >> y >> cost;
g[y].push_back({ x,cost });
}
dp = vector<vector<long long>>((1ll << n), vector<long long>(n + 1,INT_MAX));
dp[1][0] = 0;
long long ans = INT_MAX;
for (auto i : g[0]) {
ans = min(ans, solve((1 << n) - 1, i.first) + i.second);
}
if (ans == INT_MAX) {
fout << "Nu exista solutie";
}
else {
fout << ans;
}
}