luogu3959

NOIP2017所有1~2题题解总汇:本蒟蒻的另一个博客(不过博客没备份(源码),删了,只好先来CSDN上了)
就是用搜索,能过luogu

#define N 20
int n,d[N][N],ans,t[N],h[N];
void dfs(int x,int w)
{
    if(ans<=w)
        return;
    if(x==n+1)
    {
        ans=w;
        return;
    }
    fr(i,1,x-1)
        if(d[t[x]][t[i]]+1)
        {
            h[t[x]]=h[t[i]]+1;
            dfs(x+1,w+d[t[x]][t[i]]*h[t[x]]);
        }//向前面的点连边
}
#include
int main()
{
    n=read();
    fr(i,1,n)
        fr(j,1,n)
            d[i][j]=-1;
    fr(i,1,read())
    {
        int u=read(),v=read(),w=read();
        if(d[u][v]==-1)
            d[u][v]=d[v][u]=w;
        else
            d[u][v]=d[v][u]=min(d[u][v],w);
    }
    ans=(1<<20);
    fr(i,1,n)
        t[i]=i;
    srand((unsigned long long)new char);
    fr(i,1,5040)
    {
        fr(i,1,n*n)
            swap(t[rand()%n+1],t[rand()%n+1]);//随机一个排列
        fr(i,1,n)
            h[i]=0;
        dfs(2,0);
    }
    printf("%d\n",ans);
    return 0;
}

你可能感兴趣的:(NOIP,暴力)