Cod sursa(job #2450213)

Utilizator ejoi2019Ejoi 2019 ejoi2019 Data 22 august 2019 12:34:44
Problema Ciclu hamiltonian de cost minim Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
#include <iostream>
#include <vector>

using namespace std;

const int nax=18;
const int inf=(int)1e9;
int n,m;
vector <int> g[nax];
int co[nax][nax];
int jeg[nax][1<<nax];

int main()
{
        freopen("hamilton.in","r",stdin);
        freopen("hamilton.out","w",stdout);

        scanf("%d %d",&n,&m);
        for(int i=0;i<m;i++)
        {
                int x,y;
                scanf("%d %d",&x,&y);
                scanf("%d",&co[x][y]);
                g[y].push_back(x);
        }

        for(int i=0;i<n;i++) for(int j=0;j<(1<<n);j++) jeg[i][j]=inf;

        jeg[0][1]=0;

        for(int m=1;m<(1<<n);m++) for(int i=0;(1<<i)<=m;i++) if(m&(1<<i)) for(auto &j : g[i]) jeg[i][m]=min(jeg[i][m],jeg[j][m-(1<<i)]+co[j][i]);
        int ans=inf;
        for(auto &l : g[0]) ans=min(ans,jeg[l][(1<<n)-1]+co[l][0]);
        if(ans==inf) ans=-1;
        printf("%d\n",ans);

        return 0;
}