Pagini recente » Cod sursa (job #940907) | Cod sursa (job #949305) | Cod sursa (job #2628288) | Istoria paginii runda/miada/clasament | Cod sursa (job #2833365)
#include <bits/stdc++.h>
#define ull unsigned long long
#define FILES freopen("hamilton.in","r",stdin);\
freopen("hamilton.out","w",stdout);
#pragma GCC optimize ("Ofast")
#define CMAX 1000000
#define fastio std::ios_base::sync_with_stdio(NULL),cin.tie(NULL),cout.tie(NULL);
#define mp make_pair
#define INF 999999999999999
#define void inline void
#define mod 1000000007
#define ll long long
#define MAX 100
#define SMAX 10000
#define pb push_back
#define add emplace_back
using namespace std;
int dp[262149][20],n,m,mask,best=1e9;
vector<pair<int,int>> v[MAX+5];
vector<int>r[262149];
void bfs(int x)
{
r[0].add(x);
for(int i = 0;i <= mask; ++i)
{
for(auto j : r[i])
{
for(auto f : v[j])
{
if(i & (1 << (f.first-1))) continue;
int u = (i ^ (1 << (f.first-1)));
if(dp[u][f.first] > dp[i][j] + f.second && best > dp[i][j] + f.second)
{
dp[u][f.first] = dp[i][j] + f.second;
r[u].add(f.first);
}
}
}
r[i].clear();
}
}
int main()
{
fastio
FILES
cin >> n >> m;
mask = (1<<n)-1;
for(int i = 1; i <= m; ++i)
{
int a,b,c;
cin >> a >> b >> c;
a++,b++;
v[a].add(mp(b,c));
}
for(int j = 1; j <= n; ++j)
for(int k = 1; k <= mask; ++k) dp[k][j] = 1e9;
bfs(1);
best = min(best,dp[mask][1]);
if(best == 1e9) cout << "Nu exista solutie";
else cout << best;
}