Pagini recente » Cod sursa (job #2814315) | Cod sursa (job #2492506) | Cod sursa (job #2787942) | Cod sursa (job #2190504) | Cod sursa (job #2981971)
///Alexandru Morus
#include <bits/stdc++.h>
using namespace std;
ifstream in("hamilton.in");
ofstream out ("hamilton.out");
long long mt[1 << 19][30];
vector <pair <long long, long long>> g[30];
long long vf[30];
int main ()
{
long long i,n,m,a,b,c,masca,afs,j;
in >> n >> m;
for(i = 1; i < (1 << n); i ++)
{
for(j = 0; j <= n; j ++)
{
mt[i][j] = 99999999;
}
}
for(i = 1; i <= m; i ++)
{
in >> a >> b >> c;
g[b].push_back(make_pair(a,c));
if(b == 0)
{
vf[a] = c;
}
}
mt[1][0] = 0;
for(masca = 3; masca < (1 << n); masca += 2)
{
for(i = 1; i < n; i ++)
{
if(masca & (1 << i))
{
for(auto j : g[i])
{
mt[masca][i] = min(mt[masca][i],mt[masca ^ (1 << i)][j.first] + j.second);
}
}
}
}
afs = 99999999;
for(i = 1; i < n; i ++)
{
if(vf[i])
{
afs = min(afs, mt[(1 << n) - 1][i] + vf[i]);
}
}
if(afs == 99999999)
{
out << "Nu exista solutie";
return 0;
}
out << afs;
return 0;
}