Pagini recente » Cod sursa (job #2538651) | Cod sursa (job #2329347) | Cod sursa (job #2815627) | Cod sursa (job #2252518) | Cod sursa (job #1645717)
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int n,m,cost[20][20],dp[300000][20];///dp[i][j]->ajungi in nodul j, prin toate nodurile din config binara i
vector <int > g[20];
void citire()
{
scanf("%d%d",&n,&m);
memset(cost,inf,sizeof(cost));
for (int i=1;i<=m;++i)
{
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
g[y].push_back(x);
cost[x][y]=c;
}
}
int main()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
citire();
memset(dp,inf,sizeof(dp));
dp[1][0]=0;
for (int i=0;i<(1<<n);++i)
for (int j=0;j<n;++j)
if (i & (1<<j))
for (int k=0;k<g[j].size();++k)
if (i & (1<<g[j][k]))
dp[i][j]=min(dp[i][j],dp[i xor (1<<j)][g[j][k]]+ cost[g[j][k]][j]);
int minc=inf;
for (int i=0;i<g[0].size();++i)
minc=min(minc,dp[(1<<n)-1][g[0][i]]+cost[g[0][i]][0]);
if (minc==inf)
printf("Nu exista solutie");
else
printf("%d",minc);
return 0;
}