Pagini recente » Cod sursa (job #1932305) | Cod sursa (job #77849) | Cod sursa (job #1287885) | Cod sursa (job #2726653) | Cod sursa (job #2126920)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int dp[20][(1<<18)+5],mCost[20][20],m,n;
vector <int> G[20];
void citire()
{
int nod1,nod2,cost;
scanf("%d%d",&n,&m);
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
mCost[i][j]=0x3f3f3f3f;
}
for(int i=1; i<=m; i++)
{
scanf("%d%d%d",&nod1,&nod2,&cost);
mCost[nod1][nod2]=cost;
G[nod2].push_back(nod1);
}
}
void ciclumin()
{
for(int j=1; j<(1<<n); j++)
for(int i=0; i<n; i++)
if(j&(1<<i))
for(auto it:G[i])
{
if(j&(1<<it))
dp[i][j]=min(dp[it][j^(1<<i)]+mCost[it][i],dp[i][j]);
}
}
int main()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
citire();
for(int i=0; i<n; i++)
for(int j=1; j<(1<<n); j++)
dp[i][j]=0x3f3f3f3f;
dp[0][1]=0;
ciclumin();
int rasp=0x3f3f3f3f;
for(auto ii:G[0])
rasp=min(dp[ii][(1<<n)-1]+mCost[ii][0],rasp);
if(rasp!=0x3f3f3f3f)
printf("%d",rasp);
else
printf("Nu exista solutie");
return 0;
}