Pagini recente » Cod sursa (job #1601903) | Cod sursa (job #2732683) | Cod sursa (job #2151582) | Cod sursa (job #886261) | Cod sursa (job #2353861)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int n,m,x,y;
int c[25][25];
vector <int> g[20];
int dp[25][(1<<20)+1];
int main()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
scanf("%d%d", &n,&m);
for(int i=0;i<m;++i){
scanf("%d%d", &x,&y);
scanf("%d", &c[x][y]);
g[y].push_back(x);
}
for(int i = 0;i < n; ++i){
for(int j = 0; j < (1<<n); ++j)
dp[i][j] = 0x3f3f3f3f;
}
dp[0][1] = 0;
for(int j = 1; j < (1<<n); ++j){
for(int i=0;i<n;++i){
if(j&(1<<i))
for(int k : g[i])
if(j&(1<<k))
dp[i][j] = min(dp[i][j], dp[k][j^(1<<i)]+c[k][i]);
}
}
int maxi = 0x3f3f3f3f;
for(int i=0;i<n;++i)
if(c[i][0])
maxi=min(dp[i][(1<<n)-1]+c[i][0],maxi);
if(maxi!=0x3f3f3f3f)
cout<<maxi;
else
cout<<"Nu exista solutie";
return 0;
}