Cod sursa(job #2578009)

Utilizator baranceanuBaranceanu Vlad baranceanu Data 10 martie 2020 12:41:05
Problema Ciclu hamiltonian de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
#include <vector>
#define LONG_LONG_MAX 980000000
using namespace std;
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
struct muchie {int y;long long int cost;};
vector <muchie> g[19];
long long int v[524888];
int n,m,a,b,c;
void dp(int masc,int x);
int main()
{
    int i,masc=0;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>a>>b>>c;
        g[a].push_back({b,c});
    }
    int rez=1<<n;
    for(i=1;i<=rez;i++)
        v[i]=LONG_LONG_MAX;
    v[0]=0;
    dp(masc,0);
    fout<<v[(1<<n)-1];
    return 0;
}
void dp(int masc,int x)
{
    int i;
    for(i=0;i<g[x].size();i++)
    {
        if((masc&(1<<g[x][i].y))==0)
        {
            v[(masc^(1<<g[x][i].y))]=min(v[(masc^(1<<g[x][i].y))],v[masc]+g[x][i].cost);
            dp((masc^(1<<g[x][i].y)),g[x][i].y);
        }
    }
}