Cod sursa(job #3339176)

Utilizator Dia3141Costea Diana Stefania Dia3141 Data 6 februarie 2026 17:34:12
Problema Ciclu hamiltonian de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#define inf 2e9
using namespace std;
ifstream cin("hamilton.in");
ofstream cout("hamilton.out");
int dp[(1<<18)][20],x,y,n,m,c[20][20];
/// dp[mask][nod] = costul minim de a trece prin toate nodurile marcate cu 1 in masca a.i.
///                 sa incep din 0 si sa termin in nod
signed main()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            c[i][j]=inf;
    for(int i=0;i<(1<<n);i++)
        for(int j=0;j<n;j++)
            dp[i][j]=inf;
    for(int i=1;i<=m;i++)
        cin>>x>>y>>c[x][y];
    dp[1][0]=0;
    for(int i=1;i<(1<<n);i++)
        for(int j=0;j<n;j++)
            if((i>>j)&1)
                for(int k=0;k<n;k++)
                    if(j!=k&&((i>>k)&1)&&c[j][k]!=inf&&dp[i-(1<<k)][j]!=inf)
                        dp[i][k]=min(dp[i][k],dp[i-(1<<k)][j]+c[j][k]);
    int ans=inf;
    for(int i=1;i<n;i++)
        if(dp[(1<<n)-1][i]!=inf&&c[i][0]!=inf)
            ans=min(ans,dp[(1<<n)-1][i]+c[i][0]);
    if(ans==inf)
        cout<<"Nu exista solutie";
    else
        cout<<ans;
    return 0;
}