不开O2能过赛事
开O2全RE
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m;
ll w[14][14];
ll f[1<<14],res,ans=1e18;
ll len[1<<14][14][14];
ll cmp=1145140;
int main()
{
//freopen("baozang.in","r",stdin);
//freopen("baozang.out","w",stdout);
cin>>n>>m;
memset(w,0x3f,sizeof f);
for(int i=1;i<=n;i++)
w[i][i]=0;
for(int i=1;i<=m;i++)
{
int a,b;
ll c;
cin>>a>>b>>c;
w[a][b]=min(w[a][b],c);
w[b][a]=min(w[b][a],c);
}
/*for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<w[i][j]<<' ';
cout<<'\n';
}*/
for(int op=1;op<=n;op++)
{
memset(f,0x3f,sizeof f);
memset(len,0x3f,sizeof len);
f[1<<op-1]=0;
len[1<<op-1][op][op]=0;
for(int k=0;k<=(1<<n)-1;k++)
{
if(f[k]<=cmp)
for(int i=1;i<=n;i++)
if((1<<i-1)&k)
for(int j=1;j<=n;j++)
if(!((1<<j-1)&k))
if(w[i][j]<=cmp)
{
if(f[k|(1<<j-1)]>f[k]+w[i][j]*(len[k][op][i]+1))
{
for(int a=1;a<=n;a++)
len[k|(1<<j-1)][op][a]=len[k][op][a];
len[k|(1<<j-1)][op][j]=len[k][op][i]+1;
f[k|(1<<j-1)]=f[k]+w[i][j]*len[k|(1<<j-1)][op][j];
}
}
}
// cout<<f[(1<<n)-1]<<'\n';
ans=min(ans,f[(1<<n)-1]);
}
cout<<ans;
return 0;
}
/*
4 5
1 2 1
1 3 3
1 4 1
2 3 4
3 4 1
*/