Cod sursa(job #2658488)

Utilizator BogdanTicuTicu Bogdan Valeriu BogdanTicu Data 14 octombrie 2020 02:53:31
Problema Ciclu hamiltonian de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>

using namespace std;

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

int cost[18][18],dp[1<<18][18];
vector<int> graf[18];
const int INF=1000000001;
int main()
{
	int n,m;
	in>>n>>m;
	for(int i=0;i<=(1<<n)-1;i++)
		for(int j=0;j<=n-1;j++)
			dp[i][j]=INF;
	for(int i=1;i<=m;i++)
	{
		int x,y,c;
		in>>x>>y>>c;
		graf[y].push_back(x);
		cost[x][y]=c;
	}
	dp[1][0]=0;
	for(int i=1;i<=(1<<n)-1;i++)
		for(int j=0;j<=n-1;j++)
		{
			if(i&(1<<j))
			{
				int nod=j;
				for(auto vecin:graf[nod])
					if(i&(1<<vecin))
						dp[i][nod]=min(dp[i][nod],dp[i-(1<<nod)][vecin]+cost[vecin][nod]);
			}
		}
	int ans=INF;
	for(auto vecin:graf[0])
		ans=min(ans,dp[(1<<n)-1][vecin]+cost[vecin][0]);
	if(ans==INF)
		out<<"Nu exista solutie";
	else
		out<<ans;
	return 0;
}