Cod sursa(job #1954270)

Utilizator matystroiaStroia Matei matystroia Data 5 aprilie 2017 12:09:55
Problema Ciclu hamiltonian de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream fin("hamilton.in");
ofstream fout("hamilton.out");

const int N=18, INF=2e9;

int n, m, dp[1<<N][N];
vector<pair<int,int>> ad[N];

int main()
{
    fin>>n>>m;

    for(int i=0;i<m;++i)
    {
        int x, y, z;
        fin>>x>>y>>z;
        ad[x].push_back(make_pair(y, z));
    }

    for(int i=0;i<(1<<n);++i)
        for(int j=0;j<n;++j)
            dp[i][j]=INF;

    dp[1][0]=0;
    for(int i=0;i<(1<<n);++i)
        for(int j=0;j<n;++j) if(i&(1<<j))
            for(auto v:ad[j])
                if(i&(1<<v.first))
                    dp[i][j]=min(dp[i][j], dp[i^(1<<j)][v.first]+v.second);

    int ans=INF;
    for(auto v:ad[0])
        ans=min(ans, dp[(1<<n)-1][v.first]+v.second);

    fout<<(ans!=INF?ans:"Nu exista solutie");
    return 0;
}