Pagini recente » Cod sursa (job #608294) | Cod sursa (job #1313522) | Cod sursa (job #2614692) | Cod sursa (job #647322) | Cod sursa (job #429887)
Cod sursa(job #429887)
#include <algorithm>
#include <vector>
using namespace std;
#define INF 0x3f3f3f3f
#define pb push_back
#define MAX 262150
#define DIM 20
int best[MAX][DIM],cost[DIM][DIM];
vector <int> g[DIM];
int n,m,cst;
void read ()
{
int i,x,y;
memset (cost,INF,sizeof (cost));
scanf ("%d%d",&n,&m);
for (i=1; i<=m; ++i)
{
scanf ("%d%d",&x,&y);
g[y].pb (x);
scanf ("%d",&cost[x][y]);
}
}
void solve ()
{
vector <int> :: iterator it;
int i,j;
memset (best,INF,sizeof (best));
best[1][0]=0;
for (i=0; i<(1<<n); ++i)
for (j=0; j<n; ++j)
if (i&(1<<j))
for (it=g[j].begin (); it!=g[j].end (); ++it)
if (i&(1<<*it))
best[i][j]=min (best[i][j],best[i^(1<<j)][*it]+cost[*it][j]);
cst=INF;
for (it=g[0].begin (); it!=g[0].end (); ++it)
cst=min (cst,best[(1<<n)-1][*it]+cost[*it][0]);
if (cst==INF)
printf ("Nu exista solutie");
else
printf ("%d",cst);
}
int main ()
{
freopen ("hamilton.in","r",stdin);
freopen ("hamilton.out","w",stdout);
read ();
solve ();
return 0;
}