Pagini recente » Cod sursa (job #2964203) | Cod sursa (job #1870649) | Cod sursa (job #672990) | Cod sursa (job #181442) | Cod sursa (job #1917122)
#include <bits/stdc++.h>
using namespace std;
ifstream f("hamilton.in");
ofstream g("hamilton.out");
const int NMax = 18;
const int INF = 0x3f3f3f3f;
int n,m,x,y,c;
int dp[(1<<NMax) + 2][NMax + 2], di[NMax + 2][NMax + 2];
vector<pair<int,int> > G[NMax];
int main()
{
f >> n >> m;
memset(di,INF,sizeof(di));
memset(dp,INF,sizeof(dp));
for(int i = 0; i < m; ++i){
f >> x >> y >> c;
di[x][y] = c;
G[x].push_back(make_pair(y,c));
}
dp[1][0] = 0;
for(int mask = 1; mask < (1 << n); ++mask){
for(int i = 0; i < n; ++i){
if(mask & (1 << i)){
for(int j = 0; j < G[i].size(); ++j){
int v = G[i][j].first;
if(!(mask & (1 << v))){
dp[mask | (1 << v)][v] = min(dp[mask | (1 << v)][v], dp[mask][i] + G[i][j].second);
}
}
}
}
}
int ans = INF;
for(int i = 0; i < n; ++i){
if(dp[(1 << n) - 1][i] != INF && di[i][0] != INF)
ans = min(ans,dp[(1 << n) - 1][i] + di[i][0]);
}
if(ans >= INF)
g << "Nu exista solutie" << '\n';
else
g << ans << '\n';
return 0;
}