Pagini recente » Cod sursa (job #79390) | Cod sursa (job #2735609) | Cod sursa (job #2709312) | Cod sursa (job #100512) | Cod sursa (job #2705660)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
typedef long long ll;
int n,m,cost[51][51],dp[300001][21];
vector<int> lista[51];
const int INF=1e9;
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(0);
fout.tie(0);
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int a,b,c;
fin>>a>>b>>c;
lista[b].push_back(a);
cost[a][b]=c;
}
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>>j)&1)
for(auto p:lista[j])
if((i>>p)&1)
dp[i][j]=min(dp[i][j],dp[i^(1<<j)][p]+cost[p][j]);
int ans=INF;
for(int j=1;j<n;j++)
if(dp[(1<<n)-1][j]!=INF&&cost[j][0]!=0)
ans=min(ans,dp[(1<<n)-1][j]+cost[j][0]);
if(ans==INF)
fout<<"Nu exista solutie";
else
fout<<ans;
return 0;
}