Pagini recente » Cod sursa (job #302111) | Cod sursa (job #1677660) | Cod sursa (job #313915) | Cod sursa (job #1140395) | Cod sursa (job #3247234)
#include<fstream>
#include<vector>
using namespace std;
#define ll long long
ifstream cin("hamilton.in");
ofstream cout("hamilton.out");
vector<vector<ll>> dp;
vector<vector<pair<ll, ll>>> graph;
vector<vector<pair<ll, ll>>> rgraph;
int main() {
ll i, j, nr, n, m, u, v, c, pw;
cin >> n >> m;
pw = (1 << n);
dp = vector<vector<ll>>(pw + 1, vector<ll>(n, INT64_MAX));
dp[1] = vector<ll>(n, 0);
graph.resize(n);
rgraph.resize(n);
for (i = 0; i < m; i++) {
cin >> u >> v >> c;
graph[u].push_back({ v,c });
rgraph[v].push_back({ u,c });
}
for (ll p = 1; p < pw; p++) {
for (i = 0; i < n; i++) {
if (p & (1 << i)&& dp[p][i]!= INT64_MAX) {
for (auto v : graph[i]) {
if (!(p & (1 << v.first)) && dp[p][i] + v.second < dp[(p | (1 << v.first))][v.first]) {
dp[(p | (1 << v.first))][v.first] = dp[p][i] + v.second;
}
}
}
}
}
ll res = INT64_MAX;
for (auto v : rgraph[0]) {
if (dp[pw - 1][v.first] != INT64_MAX) {
res = min(res, dp[pw - 1][v.first] + v.second);
}
}
cout << res;
return 0;
}