noip2017 宝藏

传送门:https://www.luogu.org/problemnew/show/P3959

emm...之前不会打状压就那随机算法水了过去,然后毕姥爷考到计数变式题的时候才知道后悔QAQ

然后今天就二刷了一下这道毒瘤题啦....

第一份是 随机算法+prim 因为是很早之前写的,所以码风肥肠清奇...

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define maxi 0x7fffffff
using namespace std;

int n,m,u,v;
long long w,ans;
int s[20],dis[20];
long long map[20][20];

int main()
{
    ans=maxi;
    srand(time(NULL));
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i)
    {
        s[i]=i;
        for(int j=1;j<=n;++j)
        {
            map[i][j]=maxi;
        }
    }
    for(int i=1;i<=m;++i)
    {
        scanf("%d%d%d",&u,&v,&w);
        map[u][v]=map[v][u]=min(map[u][v],w);
    }
    for(int i=1;i<=10000;++i)
    {
        random_shuffle(s+1,s+n+1);
        memset(dis,0,sizeof(dis));
        dis[s[1]]=1;
        long long sum=0;
        for(int j=2;j<=n;++j)
        {
            long long mini=maxi;
            for(int k=1;k

 

然后这是今天写的 状压dp+dfs 一开始枚举起点,然后通过dfs来枚举有当前状态转移来的状态qwq

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define maxn 14
#define inf 1e9
using namespace std;

int n,m,u,v,w,ans,maxl;
int e[maxn][maxn],dis[maxn],dp[1<dp[s]+(dis[i]+1)*e[i][j])
			{
				dp[s|(1<

 

你可能感兴趣的:(noip2017 宝藏)