Pagini recente » Cod sursa (job #2622927) | Cod sursa (job #1675953) | Cod sursa (job #1156114) | Cod sursa (job #317390) | Cod sursa (job #473828)
Cod sursa(job #473828)
#include<algorithm>
#include<vector>
using namespace std;
int n,m,i,j,x,y,z;
typedef pair <int,int> p;
vector <p> a[18];
vector <p> ::iterator it;
#define CONFIG 1<<18
#define MAX 1<<29
int dp[CONFIG][18],sol=MAX;
int cost[18][18];
int main()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=0;i<CONFIG;i++)
for(j=0;j<18;j++)
dp[i][j]=MAX;
for(i=0;i<18;i++)
for(j=0;j<18;j++)
cost[i][j]=MAX;
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
a[y].push_back(p(x,z));
cost[x][y]=z;
}
dp[1][0]=0;
for(i=3;i<(1<<n);i++)
{
for(j=0;j<n;j++)
if((i&(1<<j)))
{
for(it=a[j].begin();it!=a[j].end();it++)
{
int nod=it->first;
int val=it->second;
if((i&(1<<nod))==0)
continue;
dp[i][j]=min(dp[i][j],dp[i-(1<<j)][nod]+val);
}
}
}
for(i=0;i<=n;i++)
sol=min(sol,dp[(1<<n)-1][i]+cost[i][0]);
sol<MAX?printf("%d\n",sol):printf("Nu exista solutie\n");
return 0;
}