Cod sursa(job #2374698)

Utilizator Daria09Florea Daria Daria09 Data 7 martie 2019 20:00:06
Problema Ciclu hamiltonian de cost minim Scor 85
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>
#define dim 18
#define inf int(1e9)+5
using namespace std;
ifstream f("hamilton.in");
ofstream g("hamilton.out");
int n,m;
int cost[dim+5][dim+5],dp[(1<<dim)][dim+5];
vector <int> graph[dim+5];
void Read()
{
    f>>n>>m;
    for(int i=1; i<=m; ++i)
    {
        int x,y,c;
        f>>x>>y>>c;
        graph[x].push_back(y);
        cost[x][y]=c;
    }
}
void Solve()
{
    memset(dp,inf,sizeof(dp));
    for(int i=0; i<n; ++i)
        dp[1][i]=0;
    for(int step=1; step<(1<<n); ++step)
        for(int i=0; i<n; ++i)
            if(step&(1<<i))
                for(int j=0; j<graph[i].size(); ++j)
                {
                    int son=graph[i][j];
                    if(step&(1<<son))
                        dp[step][i]=min(dp[step][i],dp[step^(1<<i)][son]+cost[i][son]);
                }
    int ans=inf;
    for(int i=0; i<n; ++i)
        if(cost[0][i]!=0)
            ans=min(ans,dp[(1<<n)-1][i]+cost[0][i]);
    if(ans!=inf)
        g<<ans;
    else
        g<<"Nu exista solutie";
}
int main()
{
    Read();
    Solve();
    return 0;
}