Pagini recente » Cod sursa (job #2495079) | Cod sursa (job #819635) | Cod sursa (job #3137693) | Cod sursa (job #2642384) | Cod sursa (job #431067)
Cod sursa(job #431067)
using namespace std;
#include <cstdio>
#include <vector>
#include <fstream>
#define N_MAX (18)
#define mp make_pair
#define oo (1<<30)
#define pb push_back
#define FOR(i,a,b) for(int i = (a);i <= (b);++i)
#define FORit(it,V) for(__typeof((V).begin()) it = (V).begin();it != (V).end();++it)
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
typedef pair<int,int> pi;
int N,M,K,C[1<<N_MAX][N_MAX];
vector< vector<pi> > A(N_MAX);
int main()
{
fin >> N >> M;
int x,y,c;
FOR(i,1,M)
{
fin >> x >> y >> c;
A[x].pb( mp(y,c) );
}
K = (1<<N)-1;
--N;
memset(C,100,sizeof(C));
C[1][0] = 0;
FOR(k,2,K)
FOR(i,1,N)
{
if(!(k & (1<<i) ))
continue;
FORit(it,A[i])
if(k & (1<<it->first) )
C[k][i] = min(C[k][i],C[k ^ (1<<i) ][it->first] + it->second);
}
int rez = oo;
FORit(it,A[0])
rez = min(rez,C[K][it->first] + it->second);
if(rez < oo)
fout << rez << '\n';
else
fout << "Nu exista solutie\n";
return 0;
}