Pagini recente » Cod sursa (job #1901514) | Cod sursa (job #3036944) | Cod sursa (job #1710259) | Cod sursa (job #2928614) | Cod sursa (job #1556525)
#include <cstdio>
#include <vector>
#define maxx 1<<18
#define inf 0x3f3f3f3f
#include <cstring>
#include <algorithm>
using namespace std;
int N,M;
int C[maxx][19],cost[18][18];
vector <int> G[maxx];
int calc(int conf,int last){
for(int i = 0;i < G[last].size();++i)
if(conf & (1<<G[last][i])){
if(G[last][i] != 0 || conf == (1<<last)+1)
C[conf][last] = min(C[conf][last],calc(conf ^ (1<<last),G[last][i]) + cost[G[last][i]][last]);
}
return C[conf][last];
}
int main(){
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
scanf("%d %d ",&N,&M);
while(M--){
int x,y,z;
scanf("%d %d %d ",&x,&y,&z);
G[y].push_back(x);
cost[x][y] = z;
}
int S = inf;
memset(C,inf,sizeof(C));
C[1][0] = 0;
for(int i=0;i < G[0].size();++i)
S = min(S,calc((1<<N)-1,G[0][i]) + cost[G[0][i]][0]);
if(S != inf)printf("%d\n",S);
else printf("Nu exista solutie\n");
return 0;
}