Pagini recente » Cod sursa (job #326513) | Cod sursa (job #1318282) | Cod sursa (job #1121487) | Cod sursa (job #1873039) | Cod sursa (job #3237702)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ifstream fin( "hamilton.in" );
ofstream fout( "hamilton.out" );
const int DIM = 18;
const int INF = 2e9;
int cost[DIM][DIM];
int main() {
ios_base::sync_with_stdio(0);
fin.tie(0);
int n, m, u, v, c;
fin >> n >> m;
while ( m-- ) {
fin >> u >> v >> c;
cost[u][v] = c;
}
vector<vector<int>> dp((1 << n), vector<int>(n, INF));
dp[1][0] = 0;
for ( int mask = 1; mask < (1 << n); ++mask ) {
if ( (mask & 1) == 0 ) continue;
for ( int i = 0; i < n; ++i ) {
for ( int j = 0; j < n; ++j ) {
if ( (mask & (1 << j)) == 0 && cost[i][j] ) {
dp[mask ^ (1 << j)][j] = min(dp[mask ^ (1 << j)][j], dp[mask][i] + cost[i][j]);
}
}
}
}
int res = INF;
for ( int i = 0; i < n; ++i ) {
if ( cost[i][0] ) {
res = min(res, dp[(1 << n) - 1][i] + cost[i][0]);
}
}
if ( res == INF ) {
fout << "Nu exista solutie";
} else {
fout << res;
}
fin.close();
fout.close();
return 0;
}