Cod sursa(job #3326131)

Utilizator vladneaguVladneagu vladneagu Data 27 noiembrie 2025 14:21:50
Problema Ciclu hamiltonian de cost minim Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
using namespace std;
const int maxn=19;
const int maxl=(1<<18)+20;
int dp[maxl][maxn];
int cost[20][20];
ifstream cin("hamilton.in");
ofstream cout("hamilton.out");
void solve() {
    int n,m;
    cin>>n>>m;
    for (int i=0;i<n;i++) {
        for (int j=0;j<n;j++) {
            cost[i][j]=1e8;
            cost[j][i]=1e8;
        }
    }
    for (int i=0;i<m;i++) {
        int l,r,c;
        cin>>l>>r>>c;
        cost[l][r]=c;
        //cost[r][l]=c;
    }
    for (int i=0;i<(1<<n);i++) {
        for (int j=0;j<n;j++) {
            dp[i][j]=1e8;
        }
    }
    dp[1][0]=0;
    for (int i=1;i<(1<<n);i++) {
        for (int j=0;j<n;j++) {
            if (i&(1<<j)) {
                for (int k=0;k<n;k++) {
                    if (!(i&(1<<k))) {
                        dp[(i|(1<<k))][k]=min(dp[(i|(1<<k))][k],dp[i][j]+cost[j][k]);
                    }
                }
            }
        }
    }
    int mini=5e8;
    for (int i=0;i<n;i++) {
        mini=min(mini,dp[(1<<n)-1][i]+cost[i][0]);
    }
    if (mini>=1e8) {
        cout<<"Nu exista solutie";
    }
    cout<<mini;
}
signed main() {
    int t;
    t=1;
    while (t--)solve();
    return 0;
}