Pagini recente » Cod sursa (job #433967) | Cod sursa (job #2672770) | Cod sursa (job #141215) | Cod sursa (job #744254) | Cod sursa (job #2634300)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("hamilton.in");
ofstream fout ("hamilton.out");
long long n,m,x,y,mask,last,last2,ans,i,j,cost;
long long c[20][20];
long long dp[300005][20];
int main()
{
fin>>n>>m;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
c[i][j]=1e18;
while(m)
{
m--;
fin>>x>>y>>cost;
c[x][y]=min(c[x][y], cost);
}
if(n==1)
{
fout<<0;
return 0;
}
for(mask=1;mask<(1<<n);mask++)
{
for(last=0;last<n;last++)
dp[mask][last]=1e18;
}
dp[1][0]=0;
for(mask=2;mask<(1<<n);mask++)
{
if(mask%2==0)
continue;
for(last=1;last<n;last++)
{
if(!((mask>>last)&1))
continue;
for(last2=0;last2<n;last2++)
{
if(last==last2)
continue;
if(!((mask>>last2)&1))
continue;
dp[mask][last]=min(dp[mask][last], dp[mask-(1<<last)][last2]+c[last2][last]);
}
}
}
ans=1e18;
for(last=1;last<n;last++)
ans=min(dp[(1<<n)-1][last]+c[last][0], ans);
fout<<ans;
return 0;
}