Cod sursa(job #3273903)

Utilizator alecu2008Alecu Alexandru alecu2008 Data 4 februarie 2025 13:16:09
Problema Ciclu hamiltonian de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <bits/stdc++.h>

using namespace std;

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

const int inf=0x3F3F3F3F;

vector<vector<int> > graf,dp;

int n,m,ans;

int hamilton(){
    dp.assign((1<<n),vector<int>(n,inf));
    dp[1][0]=0;
    for(int mask=2;mask<dp.size();mask++){
        if(mask&1){
            for(int i=0;i<n;i++){
                if(mask&(1<<i)){
                    for(int j=0;j<n;j++){
                        if(mask&(1<<j))
                        dp[mask][i]=min(dp[mask][i],dp[mask^(1<<i)][j]+graf[j][i]);
                    }
                }
            }
        }
    }
    ans=inf;
    for(int i=0;i<n;i++){
        ans=min(dp[(1<<n)-1][i]+graf[i][0],ans);
    }
    if(ans==inf)return -1;
    else return ans;
}





int main()
{
    fin>>n>>m;
    graf.assign(n,vector<int>(n,inf));
    for(int i=0,x,y,c;i<m;i++){
        fin>>x>>y>>c;
        graf[x][y]=c;
    }
    ans=hamilton();
    if(ans==-1)fout<<"Nu exista solutie";
    else fout<<ans;
    return 0;
}