对于一个连通块,取一个点进行dfs,得到一棵dfs搜索树,则这棵树的深度不超过10,且所有额外边都是前向边。

对于每个点x,设S为三进制状态,S第i位表示根到x路径上深度为i的点的状态:

0:选了

1:没选,且没满足

2:没选,且已满足

设f[i][j]表示考虑根到x路径上深度为i的点时这些点的状态为j时的最小费用,然后按DFS序进行DP即可。

时间复杂度$O((n+m)3^{10})$,空间复杂度$O(10\times3^{10})$。

#include<cstdio>
const int N=20010,M=50010,K=11,inf=2000000000;
int n,m,i,x,y,a[N],g[N],v[M],nxt[M],ed,vis[N],d[N],q[K],pow[K],f[K][59050],ans;
inline void add(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
inline int bit(int x,int y){return x/pow[y]%3;}
inline void up(int&x,int y){if(x>y)x=y;}
inline int min(int x,int y){return x<y?x:y;}
void dfs(int x,int y){vis[x]=1,d[x]=y;if(!y)f[0][0]=a[x],f[0][1]=0,f[0][2]=inf;else{int cnt=0;for(int i=g[x];i;i=nxt[i]){int u=v[i];if(vis[u]&&d[u]<y)q[cnt++]=d[u];}for(int S=pow[y+1]-1;~S;S--)f[y][S]=inf;for(int S=pow[y]-1;~S;S--){int U=1,V=S;for(int i=0;i<cnt;i++)if(bit(S,q[i])==0)U=2;else if(bit(S,q[i])==1)V+=pow[q[i]];up(f[y][S+U*pow[y]],f[y-1][S]);up(f[y][V],f[y-1][S]+a[x]);}}for(int i=g[x];i;i=nxt[i]){int u=v[i];if(!vis[u]){dfs(u,y+1);for(int S=0;S<pow[y+1];S++)f[y][S]=min(f[y+1][S],f[y+1][S+2*pow[y+1]]);}}
}
int main(){for(pow[0]=i=1;i<K;i++)pow[i]=pow[i-1]*3;scanf("%d%d",&n,&m);for(i=1;i<=n;i++)scanf("%d",&a[i]);while(m--)scanf("%d%d",&x,&y),add(x,y),add(y,x);for(i=1;i<=n;i++)if(!vis[i])dfs(i,0),ans+=min(f[0][0],f[0][2]);return printf("%d",ans),0;
}

  

BZOJ3836 : [Poi2014]Tourism相关推荐

  1. 洛谷P3572 [POI2014]PTA-Little Bird

    P3572 [POI2014]PTA-Little Bird 题目描述 In the Byteotian Line Forest there are nn trees in a row. On top ...

  2. P3572 [POI2014]PTA-Little Bird

    P3572 [POI2014]PTA-Little Bird 一只鸟从1跳到n.从1开始,跳到比当前矮的不消耗体力,否则消耗一点体力,每次询问有一个步伐限制k,求每次最少耗费多少体力 很简短的题目哼. ...

  3. [BZOJ3832][Poi2014]Rally

    [BZOJ3832][Poi2014]Rally 试题描述 An annual bicycle rally will soon begin in Byteburg. The bikers of Byt ...

  4. BZOJ4543 POI2014 Hotel加强版 【长链剖分】【DP】*

    BZOJ4543 POI2014 Hotel加强版 Description 同OJ3522 数据范围:n<=100000 Sample Input 7 1 2 5 7 2 5 2 3 5 6 4 ...

  5. hdu 4049 Tourism Planning [ 状压dp ]

    传送门 Tourism Planning Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  6. P3564 [POI2014]BAR-Salad Bar(ST表 + 二分)

    P3564 [POI2014]BAR-Salad Bar 给定一个长度为nnn的数组,里面元素只有111跟−1-1−1,问选出一个长度为lenlenlen的区间使得,这个区间的前缀和时刻大于零,后缀和 ...

  7. bzoj4543. [POI2014]Hotel加强版

    bzoj4543. [POI2014]Hotel加强版 题面描述 Solution 先看n≤5e3n \leq 5e3n≤5e3怎么做. 考虑树形dpdpdp. 设f[i][j]f[i][j]f[i] ...

  8. P3567 [POI2014]KUR-Couriers

    P3567 [POI2014]KUR-Couriers 题意: 给一个长度为 n 的正整数序列 a.共有 m 组询问,每次询问一个区间 [l,r] ,是否存在一个数在 [l,r]中出现的次数严格大于一 ...

  9. [骗分技巧——随机化Ⅱ] [Poi2014]Couriers,CodeChef - TKCONVEX

    文章目录 [Poi2014]Couriers problem solution code CodeChef - TKCONVEX problem solution code 随机算法的典型套路:枚举太 ...

最新文章

  1. 计算机在人力资源管理中的应用论文,计算机人事管理论文
  2. uniapp与帝国cms7.5开发实战之动态爆料订阅号app开发实战记录
  3. Qt Creator指定动态属性
  4. FFmpeg命令的几种应用
  5. ubuntu14下搭建ssdb主从环境
  6. 内核调试神器SystemTap — 探测点与语法(二)
  7. mysql 开启用户远程登录
  8. 3D建模软件有哪些?
  9. 复仇者联盟3:无限战争 | 细节-台词-镜头 详细分析复3预测复4结局
  10. python导入数据画直方图加正态曲线_用python制作正态分布图
  11. 二级MS Office高级应用--Excel常用函数
  12. ConcurrentHashMap源码解读
  13. GitLab之something went wrong during merge pre-receive hook问题
  14. 大龄Android程序员刚迈过了 35 岁这个“坎儿”,和大家说点儿心里话
  15. ROS IOError: [Errno 13] Permission denied 报错
  16. 什么是人工智能(深度学习)
  17. 高校图书馆管理系统 php 漏洞,某通用图书馆管理系统SQL注入_MySQL
  18. JIRA Core、JIRA Software、JIRA Service Desk的区别
  19. 江西理工大学南昌校区排名赛 E: 单身狗的种树游戏
  20. 树莓派 4b 可执行文件 无法双击运行_云拆机,一起来看看树莓派的新品——Raspberry Pi 400...

热门文章

  1. 以太坊智能合约开发第七篇:智能合约与网页交互
  2. gulp复制整个文件夹或文件到指定目录(包括拷贝单个文件)
  3. centos6.7x86_64安装nginx (good)
  4. LeanCloud学习笔记(1)
  5. Django在Win7下安装与创建项目hello word示例
  6. HDOJ 1082 模拟 水
  7. springcloud(一)-初识
  8. bzoj1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
  9. 【日记】一次程序调优发现的同步IO写的问题,切记
  10. 27、Label 自适应文本 xib