题目
STO rqy OTZ
首先这种题一看我们就知道可以爆搜。
prim一眼假了,但是加个SA也能过。
所以我们来写状压。
记\(f_{i,j,S}\)表示起点到\(j\)距离为\(i\),我们现在从\(j\)开始挖通\(S\)的最小代价。
转移是显然的:枚举\(S\)的子集\(T\)和\(T\)中的点\(k\),挖通\((k,j)\)这条边(如果存在)。
\(f_{i,j,S}=\min\limits_{k\in T\subseteq S}(f_{i,j,S\setminus T}+f_{k,j+1,T\setminus\{k\}}+(i+1)E_{j,k})\)。

#include<bits/stdc++.h>
using namespace std;
const int N=12,inf=0x3f3f3f3f;
int read(){int x;cin>>x;return x;}
int min(int a,int b){return a<b? a:b;}
int low[1<<N],cnt[1<<N],f[N][N][1<<N],E[N][N];
int main()
{
    int n=read(),m=read(),i,j,k,u,v,w,t,S,T,U,ans;
    memset(E,0x3f,sizeof E),memset(f,0x3f,sizeof f),U=(1<<n)-1;
    for(i=1;i<=m;++i) u=read()-1,v=read()-1,w=read(),E[u][v]=E[v][u]=min(E[u][v],w);
    for(i=1;i<=U;++i) cnt[i]=cnt[i&i-1]+1;
    for(i=0;i<=n;++i) low[1<<i]=i;
    for(i=1;i<=U;++i) low[i]=low[i&-i];
    for(i=0;i<n;++i) f[n-1][i][0]=0;
    for(i=n-2;~i;--i)
    for(j=0;j<n;++j)
        for(f[i][j][0]=0,S=1;S<=U;++S)
        if(~S&1<<j&&cnt[S]<=n-i-1)
            for(T=S;T;T=T-1&S)
            if(f[i][j][S&~T]<f[i][j][S])
                for(k=low[t=T];t;k=low[t=t^1<<k])
                if(E[j][k]^inf)
                    f[i][j][S]=min(f[i][j][S],f[i+1][k][T^1<<k]+f[i][j][S^T]+(i+1)*E[j][k]);
    for(ans=inf,i=0;i<n;++i) ans=min(ans,f[0][i][U^1<<i]);
    return !printf("%d",ans);
}

Luogu P3959 [NOIP2017]宝藏的更多相关文章

  1. 洛谷 P3959 NOIP2017 宝藏 —— 状压搜索

    题目:https://www.luogu.org/problemnew/show/P3959 搜索: 不是记忆化,而是剪枝: 邻接矩阵存边即可,因为显然没有那么多边. 代码如下: #include&l ...

  2. Luogu 3959 [NOIP2017] 宝藏

    NOIP2017最后一道题 挺难想的状压dp. 受到深度的条件限制,所以一般的状态设计带有后效性,这时候考虑把深度作为一维,这样子可以保证所有状态不重复计算一遍. 神仙预处理:先处理出一个点连到一个集 ...

  3. 洛谷P3959 [NOIP2017]宝藏

    [题目描述] 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋,也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中的宝藏.但 ...

  4. Luogu 3959 [NOIP2017] 宝藏- 状压dp

    题解 真的想不到这题状压的做法...听说还有跑的飞快的模拟退火,要是现场做绝对滚粗QAQ. 不考虑深度,先预处理出 $pt_{i, S}$ 表示让一个不属于 集合 $S$ 的 点$i$ 与点集 $S$ ...

  5. 题解 Luogu P3959 【宝藏】

    来一篇不那么慢的状压??? 话说这题根本没有紫题难度吧,数据还那么水 我是不会告诉你我被hack了 一看数据规模,n≤12,果断状压. 然后起点要枚举,就设dp状态: f[i][j]=以i为起点到j状 ...

  6. 洛谷$P3959\ [NOIp2017]$ 宝藏 状压$dp$

    正解:状压$dp$ 解题报告: 传送门$QwQ$ $8102$年的时候就想搞这题了,,,$9102$了$gql$终于开始做这题了$kk$ 发现有意义的状态只有当前选的点集和深度,所以设$f_{i,j} ...

  7. [luogu]P3959 宝藏[NOIP][状态压缩DP]

    [luogu]P3959 宝藏[TREASURE] 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的 ...

  8. [Luogu P3959] 宝藏 (状压DP+枚举子集)

    题面 传送门:https://www.luogu.org/problemnew/show/P3959 Solution 这道题的是一道很巧妙的状压DP题. 首先,看到数据范围,应该状压DP没错了. 根 ...

  9. [luogu P3953] [noip2017 d1t3] 逛公园

    [luogu P3953] [noip2017 d1t3] 逛公园 题目描述 策策同学特别喜欢逛公园.公园可以看成一张$N$个点$M$条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,$N ...

随机推荐

  1. C# socket异步 服务端

    转自:  http://blog.csdn.net/qq_20282263/article/details/54310737 private Dictionary<string, Session ...

  2. C# 2.0

    序言 泛型 为什么需要泛型? 分部类型 分部类和方法 partial 匿名方法 使用Delegate的时候很多时候没必要使用一个普通的方法,因为这个方法只有这个Delegate会用,并且只用一次,这时 ...

  3. hdu 4451 Dressing 衣服裤子鞋 简单容斥

    Dressing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  4. Python 标准库、第三方库

    Python 标准库.第三方库 Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具.这些库可用于文件读写 ...

  5. 如何快速查询中科院JCR分区和汤森路透JCR分区

    参考: https://blog.csdn.net/chichuhe/article/details/83054624 https://blog.csdn.net/Sunflower02/articl ...

  6. C++入门经典-例2.8-输出整数,控制打印格式

    1:代码如下: // 2.8.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #incl ...

  7. LeetCode 98. 验证二叉搜索树(Validate Binary Search Tree)

    题目描述 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也 ...

  8. SpringBoot&Dubbo&Zookeeper远程调用项目搭建

    序言 Dubbo一款分布式服务框架,作为阿里巴巴SOA服务化治理方案的核心框架,通过高性能和透明化的RPC实现服务的远程调用,对服务的负载均衡以及项目的耦合性提供很强的解决方式;具体Dubbo的介绍和 ...

  9. 后盾网lavarel视频项目---3、lavarel中子控制器继承父控制器以判断是否登录

    后盾网lavarel视频项目---3.lavarel中子控制器继承父控制器以判断是否登录 一.总结 一句话总结: 在common控制器的构造方法中验证登录中间件,其它的控制器继承common控制器 p ...

  10. docker容器无法删除——状态Dead

    问题:由于容器挂载数据卷,无法直接删除. 解决: 先查出ID 进行杀掉,然后再删除. . 搞定