Pagini recente » Cod sursa (job #2049978) | Cod sursa (job #2623402) | Cod sursa (job #2345211) | Cod sursa (job #3040523) | Cod sursa (job #582438)
Cod sursa(job #582438)
#include <cstdio>
#include <cstring>
#define Nmx 20
#define INF 0x3f3f3f3f
using namespace std;
int n,m,C[Nmx][Nmx];
int sol[Nmx][(1<<18)+ 10];
struct nod
{
int inf;
nod *urm;
};
nod *G[Nmx];
inline int min(int x,int y)
{
if(x<y) return x;
return y;
}
void add(int x,int y)
{
nod *aux=new nod;
aux->inf = y;
aux->urm = G[x];
G[x]=aux;
}
void read()
{
int x,y,c;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&c);
C[x][y]=c;
add(y,x);
}
}
void solve()
{
memset(sol,INF,sizeof(sol));
int msol=INF;
sol[0][1]=0;
for(int stare=0;stare<(1<<n);++stare)
for(int i=0;i<n;++i)
if(stare&(1<<i))
for(nod *p=G[i];p;p=p->urm)
if(stare&(1<<p->inf))
sol[i][stare]=min(sol[i][stare],sol[p->inf][stare^(1<<i)]+C[p->inf][i]);
for(nod *p=G[0];p;p=p->urm)
msol=min(msol,sol[p->inf][(1<<n)-1]+C[p->inf][0]);
printf("%d\n",msol);
}
int main()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
read();
solve();
return 0;
}