Pagini recente » Cod sursa (job #463213) | Cod sursa (job #1359364) | Cod sursa (job #1083337) | Cod sursa (job #370604) | Cod sursa (job #1292610)
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
#define maxN 20
#define maxBit 18
#define d first
#define c second
#define INF 1000000000
long n,m,i,x,y,cost;
vector<pair<long,long> > list[maxN];
long dp[maxN][1<<maxBit];
long Calc(long nod,long conf){
if(dp[nod][conf] == -1){
dp[nod][conf] = INF;
for(long i=0;i<list[nod].size();i++){
long newNod = list[nod][i].d;
if(((1<<newNod) & conf )||(conf ^ (1<<nod) == 0 && newNod == 0)){
long newConf = conf ^ (1<<nod);
dp[nod][conf] = min(dp[nod][conf],Calc(newNod,newConf) + list[nod][i].c);
}
}
}
return dp[nod][conf];
}
int main()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
scanf("%ld %ld",&n,&m);
for(i=1;i<=m;i++){
scanf("%ld %ld %ld",&x,&y,&cost);
list[y].push_back(make_pair(x,cost));
}
memset(dp,-1,sizeof(dp));
dp[0][0] = 0;
Calc(0,(1<<n) - 1);
if(dp[0][(1<<n) - 1] == INF)
printf("Nu exista solutie");
else
printf("%ld",dp[0][(1<<n) - 1]);
return 0;
}