Pagini recente » Cod sursa (job #1340400) | Cod sursa (job #1362745) | Cod sursa (job #1142903) | Cod sursa (job #337116) | Cod sursa (job #3216288)
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
#define s second
#define f first
const int NMAX=20;
#define int long long
using namespace std;
ifstream cin("hamilton.in");
ofstream cout("hamilton.out");
int v[NMAX][NMAX], dp[(1<<NMAX)][NMAX];
int n, m, ans;
signed main()
{
int i, j, mask, c, a, b;
cin>>n>>m;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
v[i][j]=1e9;
}
}
for(i=1; i<=m; i++)
{
cin>>a>>b>>c;
v[b][a]=c;
}
for(i=0; i<n; i++)
{
for(mask=0; mask<(1<<n); mask++)
{
dp[mask][i]=1e9;
}
}
dp[1][0]=0;
for(mask=2; mask<(1<<n); mask++)
{
for(i=0; i<n; i++)
{
if(mask&(1<<i))
{
for(j=0; j<n; j++)
{
if(mask&(1<<j))
{
dp[mask][i]=min(dp[mask][i], dp[mask^(1<<i)][j]+v[i][j]);
}
}
}
}
}
ans=1e9;
for(i=1; i<n; i++)
{
ans=min(ans, dp[(1<<n)-1][i]+v[0][i]);
}
cout<<ans<<'\n';
return 0;
}