Pagini recente » Cod sursa (job #1961693) | Cod sursa (job #2104839) | Cod sursa (job #1238541) | Cod sursa (job #1461329) | Cod sursa (job #1805106)
#include <bits/stdc++.h>
#define maxN 18
#define maxC 1<<18
#define INF (1<<30)
using namespace std;
vector<pair<int,int> >v[maxN];
int n,m,i,j,k,x,y,z,mask,sol=INF;
int dp[1<<maxN][maxN];
int main()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=m;i++)
scanf("%d %d %d",&x,&y,&z),
v[y].push_back(make_pair(x,z));
for(mask=0;mask<(1<<n);mask++)
for(j=0;j<n;j++)
dp[mask][j]=INF;
dp[1][0]=0;
for(mask=0;mask<(1<<n);mask++)
for(i=0;i<n;i++)
{
if(mask&(1<<i)==0)
continue;
for(j=0;j<(int)v[i].size();j++)
{
if(mask&(1<<v[i][j].first)==0)
continue;
dp[mask][i]=min(dp[mask][i],dp[mask^(1<<i)][v[i][j].first]+v[i][j].second);
}
}
for(i=0;i<(int)v[0].size();i++)
sol=min(sol,dp[(1<<n)-1][v[0][i].first]+v[0][i].second);
if(sol==INF)
printf("Nu exista solutie");
else printf("%d",sol);
return 0;
}