看数据范围想到状压,我们知道最后是选出一颗生成树,但边权的计算有一些有趣;

我们先选一个点做根;然后就发现边的权和深度有关;那我们按深度dp;即按层dp;

dp[i][s]表示前i层选的点集为s,转移时我们枚举s的补集的子集ss;对于ss中的每个点,

我们连上他到s中点的最小边;但这样连的边没办法保证深度为i+1,但我们就强制把他设成i+1;

这样感觉很错,但其实是对的,因为这样只会使答案变大,而且还可以保证真正的答案被枚举到;

相当于是一种对限制的扩大。

  1. #include<iostream>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<cstdio>
  6. using namespace std;
  7. typedef long long ll;
  8. const ll inf=1e16;
  9. ll map[][],dis[][(<<)+];
  10. ll dp[][(<<)+],z;
  11. int n,m,x,y;
  12. int main(){
  13. cin>>n>>m;
  14. if(!m){puts("");return ;}
  15. for(int i=;i<=;++i)
  16. for(int j=;j<=;++j)map[i][j]=inf;
  17. for(int i=;i<=;++i)
  18. for(int j=;j<=(<<);++j)dis[i][j]=inf;
  19. for(int i=;i<=;++i)
  20. for(int j=;j<=(<<);++j)dp[i][j]=inf;
  21. for(int i=;i<=m;++i){
  22. scanf("%d%d%d",&x,&y,&z);
  23. map[x][y]=map[y][x]=min(map[x][y],z);
  24. }
  25. int sta=(<<n)-;
  26. for(int s=;s<=sta;++s){
  27. for(int i=;i<=n;++i){
  28. if((<<(i-))&s)continue;
  29. for(int j=;j<=n;++j){
  30. if((<<(j-))&s)dis[i][s]=min(dis[i][s],map[i][j]);
  31. }
  32. }
  33. }
  34. for(int i=;i<=n;++i)dp[][<<(i-)]=;
  35. for(int s=;s<=sta;++s){
  36. int st=sta-s;
  37. for(int ss=st;ss;ss=(ss-)&st){
  38. ll res=;
  39. for(int i=;i<=n;++i){
  40. if((<<(i-))&ss)res+=dis[i][s];
  41. }
  42. for(ll i=;i<n;++i){
  43. dp[i+][ss|s]=min(dp[i+][ss|s],dp[i][s]+res*i);
  44. }
  45. }
  46. }
  47. ll ans=inf;
  48. for(int i=;i<=n;++i)ans=min(ans,dp[i][sta]);
  49. cout<<ans;
  50. return ;
  51. }

noip2017d2t2的更多相关文章

  1. NOIp2017D2T2(luogu3959) 宝藏 (状压dp)

    时隔多年终于把这道题锅过了 数据范围显然用搜索剪枝状压dp. 可以记还有哪些点没到(或者已到了哪些点).我们最深已到的是哪些点.这些点的深度是多少,然后一层一层地往下推. 但其实是没必要记最深的那一层 ...

  2. 【状压DP】【P3959】【NOIP2017D2T2】宝藏

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

随机推荐

  1. C语言 内存

    内存属性: 1.大小 2.位置 int a;  默认方式  (段) 内核空间        应用程序不许访问 ------------------------------------------3g ...

  2. 为ListView的子列表添加不同的响应事件

    如何实现当点击不同的listView中的每个子列表出发不同的事件? 当在布局中,设置对应的ListView主布局及对应子布局时,在Activity中向ListView中添加子列表,利用每个子列表的Po ...

  3. django项目创建启动 ORM操作

    . HTTP协议消息的格式: . 请求(request) 请求方法 路径 HTTP/1.1\r\n k1:v1\r\n ...\r\n \r\n 请求体 <-- 可以有,可以没有 . 响应(re ...

  4. Cookie 和 Session 的区别和联系?session的生命周期?多个服务器部署session的管理?

    一.session 和 cookie 1.cookie Cookie会根据响应报文里的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie.当下次客户端再向服务端发起请求时,客户端会 ...

  5. NOI导刊 2018河南郑州游记

    前言 本蒟蒻来自浙江的弱市弱校,因为不想两年\(OI\)一场空,以及想出去玩,所以与同届大佬一起报了\(NOI\)导刊,希望能留下点不错的记忆吧. \(Day\ 0\) \(10\)月\(1\)日 经 ...

  6. [Robot Framework] 怎么做数学运算?

    运用BuiltIn里面的Set Variable

  7. React中使用CSS

    第一种: 在组件中直接使用style 不需要组件从外部引入css文件,直接在组件中书写. import React, { Component } from "react"; con ...

  8. 局外者看 -- 美团 vs 滴滴

    1. 美团 美团外面 美团打车 美团云服务 2. 滴滴 滴滴打车 滴滴外面 滴滴云服务 这是一场企业级别的战争,而且是本土战争,时间开始于何时,不知道,现在写这个博客的时间是2018年3月21日下午. ...

  9. 【Web】Nginx 反向代理与负载均衡

    反向代理 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...

  10. word表格如何实现序号自动填充

    打开word文档,我们需要在如下表格中的准考证号这一列中输入准考证号,手工输入肯定很慢,且容易出错.   我们先选中需要填充准考证号的表格.   选择功能区域中的“开始”,在“段落”组中点击“编号”按 ...