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<stdlib.h>
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章