正题

题目链接:https://www.luogu.com.cn/problem/P3577


题目大意

给出nnn个点mmm条边的一张图,每个点有费用CiC_iCi​,求选出费用和最小的点使得每个点都至少有一个相邻的点(或自己)被选择。保证图上不存在超过101010个点的简单路径。

1≤n≤20000,1≤m≤250001\leq n\leq 20000,1\leq m\leq 250001≤n≤20000,1≤m≤25000


解题思路

突破点肯定在于不超过101010个点的简单路径,可以理解为任意一个点为根时的深度都不超过101010,因为dfsdfsdfs树上所有边都是返祖边,所以考虑状压。

设fi,sf_{i,s}fi,s​表示节点iii所在到根节点的链上的节点状态为sss时的最小贡献,因为选过的点会影响到下面的节点,所以两维的状态不能够转移,设0/1/20/1/20/1/2表示这个节点选择了/没有选择且没有覆盖/没有选择且被覆盖。

然后转移挺好写的,但是会MLEMLEMLE,因为同深度之间的转移相同,所以之间设fd,sf_{d,s}fd,s​表示深度为ddd的某个点状态为sss即可。

时间复杂度:O(310n)O(3^{10}n)O(310n)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e4+10,S=59059;
struct node{int to,next;
}a[N<<2];
int n,m,tot,cnt,ans,ls[N],q[N];
int dep[N],c[N],f[11][S],pw[11];
bool v[N];
void addl(int x,int y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return;
}
void dfs(int x,int fa){int cnt=0;v[x]=1;dep[x]=dep[fa]+1;int d=dep[x],MS=pw[dep[x]];if(fa){for(int i=ls[x];i;i=a[i].next)if(v[a[i].to])q[++cnt]=a[i].to;memset(f[d],0x3f,sizeof(f[d]));for(int s=0;s<MS;s++){int No=1,Yes=s;for(int i=1;i<=cnt;i++){if(s/pw[dep[q[i]]]%3==0)No=2;if(s/pw[dep[q[i]]]%3==1)Yes+=pw[dep[q[i]]];}f[d][s+No*pw[d]]=min(f[d][s+No*pw[d]],f[d-1][s]);f[d][Yes]=min(f[d][Yes],f[d-1][s]+c[x]);}}else f[0][0]=c[x],f[0][1]=0,f[0][2]=1e9;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(v[y])continue;dfs(y,x);for(int s=0;s<MS*3;s++)f[d][s]=min(f[d+1][s],f[d+1][s+2*pw[d+1]]);}return;
}
int main()
{scanf("%d%d",&n,&m);pw[0]=1;for(int i=1;i<=10;i++)pw[i]=pw[i-1]*3;for(int i=1;i<=n;i++)scanf("%d",&c[i]);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);addl(x,y);addl(y,x);}dep[0]=-1;for(int i=1;i<=n;i++)if(!v[i]){dfs(i,0);ans+=min(f[0][0],f[0][2]);}printf("%d\n",ans);return 0;
}

P3577-[POI2014]TUR-Tourism【状压dp】相关推荐

  1. 动态规划 —— 状压 DP

    [概述] 通常将以一个集合内的元素信息作为状态且状态总数为指数级别的动态规划称为状态压缩动态规划. 其是一类以集合信息为状态的特殊的动态规划问题,主要有传统集合动态规划与基于连通性状态压缩的动态规划两 ...

  2. POJ 1038 Bugs Integrated Inc (复杂的状压DP)

    \(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...

  3. codeforces 8C. Looking for Order 状压dp

    题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...

  4. UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)

    整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...

  5. POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)

    poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...

  6. 【每日DP】day2、P1879 [USACO06NOV]Corn Fields G玉米地(状压DP模板题)难度⭐⭐⭐★

    昨天的每日DP我还在写01背包,今天就到状压DP了,真刺激. P1879 [USACO06NOV]Corn Fields G 题目链接 输入 2 3 1 1 1 0 1 0 输出 9 一道简单的状压D ...

  7. hdu 4778 Gems Fight! 状压dp

    转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...

  8. 【洛谷 P1896】[SCOI2005]互不侵犯(状压dp)

    题目链接 题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 这是道状压\(DP\)好题啊.. ...

  9. P2340 奶牛会展(状压dp)

    P2340 奶牛会展 题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览.由 ...

  10. UVa 11825 (状压DP) Hackers' Crackdown

    这是我做状压DP的第一道题,状压里面都是用位运算来完成的,只要耐下心来弄明白每次位运算的含义,还是容易理解的. 题意: 有编号为0~n-1的n台服务器,每台都运行着n中服务,每台服务器还和若干台其他服 ...

最新文章

  1. KVM libvirt的CPU热添加
  2. linux 基础学习入门 2
  3. oralce创建用户
  4. PHP+MySQL能做什么?
  5. ffmpeg 转换flv压缩大小_ffmpeg转换参数和压缩输出大小的比率 参考 最新版本FFMPEG...
  6. Codeforces 862D. Mahmoud and Ehab and the binary string 【二分】(交互)
  7. [转]Effective C#原则4:用条件属性而不是#if
  8. 正则表达式批量替换 单引号
  9. Oracle中开启并行和相关查询
  10. python3写文件_python3 写文件问题
  11. CSS3渐变(Gradients)-线性渐变
  12. 问道虚拟机服务器地址,问道1.60.0905虚拟机手工启动服务端+配套客户端+启动教程+充值注册软件+配套工具...
  13. 计算机专业期末试卷分析,计算机期末试卷分析
  14. 关于win10优化问题
  15. 名人论数学——数学的本质
  16. App Links(APP关联)
  17. 男人,就要对自己下手狠一点
  18. 把图片隐藏进音频详细教程(含软件下载及使用方法)
  19. 【LVGL(6)】显示中文设置,制作中文字库
  20. 梅尔加尼服务器状态,梅尔加尼服务器第二界闪光平原暴力竞走大赛

热门文章

  1. 指定的文件不是虚拟磁盘 没有快照_vmware workstaiton 15 虚拟机克隆(4)
  2. python作业题目用户输入行数、输出倒的等腰三角形_智慧职教云课堂APPPython程序设计(常州工业职业技术学院)作业期末考试答案...
  3. doxygen如何生成JAVA文档_有用Doxygen生成文档的吗?发一篇Doxygen的使用文档给大家,从网上搜来的。...
  4. oracle未找到时区,Oracle ADF 未找到时区错误
  5. HTML坐标不随着屏幕大小改变,HTML热区map坐标,随窗口大小自适应办法(javascript)...
  6. yii 使用 有赞sdk_有赞ABTest系统:数据驱动增长实践
  7. pc模式 华为mate30_华为mate30与电脑连不上怎么回事
  8. 7-2 批处理作业调度 (10 分)(思路+详解)
  9. [SpringSecurity]web权限方案_用户授权_注解使用
  10. hdu4841 圆桌问题-vector容器模拟