bzoj 4006 管道连接 —— 斯坦纳树+状压DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4006
用斯坦纳树求出所有关键点的各种连通情况的代价,把这个作为状压(压的是集合选择情况)的初值DP即可。
代码如下:
#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<queue> #define pb push_back using namespace std; int rd() {int ret=0,f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=0; ch=getchar();}while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();return f?ret:-ret; } int const xn=1005,xm=6005,xxn=(1<<10)+5,inf=0x3f3f3f3f; int n,m,hd[xn],ct,to[xm],nxt[xm],w[xm],f[xn][xxn],g[xxn]; int c[15],bin[15],cnt; bool vis[xn]; queue<int>q; vector<int>v[15]; int Min(int x,int y){return x<y?x:y;} void add(int x,int y,int z){to[++ct]=y; nxt[ct]=hd[x]; hd[x]=ct; w[ct]=z;} void spfa(int sta) {memset(vis,0,sizeof vis);for(int i=1;i<=n;i++)if(f[i][sta]<inf)q.push(i),vis[i]=1;while(q.size()){int x=q.front(); q.pop(); vis[x]=0;for(int i=hd[x],u;i;i=nxt[i])if(f[u=to[i]][sta]>f[x][sta]+w[i]){f[u][sta]=f[x][sta]+w[i];if(!vis[u])vis[u]=1,q.push(u);}} } int main() {bin[0]=1; for(int i=1;i<=10;i++)bin[i]=bin[i-1]*2;n=rd(); m=rd(); int K=rd();for(int i=1,x,y,z;i<=m;i++)x=rd(),y=rd(),z=rd(),add(x,y,z),add(y,x,z);memset(f,0x3f,sizeof f);for(int i=1,cr,x;i<=K;i++){cr=rd(); x=rd();if(!c[cr])c[cr]=++cnt;v[c[cr]].pb(i); f[x][bin[i-1]]=0;//i! }int mx=bin[K];for(int sta=1;sta<mx;sta++){for(int i=1;i<=n;i++)for(int s=(sta&(sta-1));s;s=(sta&(s-1)))f[i][sta]=Min(f[i][sta],f[i][s]+f[i][sta^s]);spfa(sta);}memset(g,0x3f,sizeof g); mx=bin[cnt];for(int sta=1;sta<mx;sta++){int s=0;for(int j=1;j<=cnt;j++)if(sta&bin[j-1]){for(int k=0;k<v[j].size();k++)s|=bin[v[j][k]-1];}for(int j=1;j<=n;j++)g[sta]=Min(g[sta],f[j][s]);}for(int sta=1;sta<mx;sta++)for(int s=(sta&(sta-1));s;s=(sta&(s-1)))g[sta]=Min(g[sta],g[s]+g[sta^s]);printf("%d\n",g[mx-1]);return 0; }
转载于:https://www.cnblogs.com/Zinn/p/10235994.html
bzoj 4006 管道连接 —— 斯坦纳树+状压DP相关推荐
- bzoj1402 Ticket to Ride 斯坦纳树 + 状压dp
给定\(n\)个点,\(m\)条边的带权无向图 选出一些边,使得\(4\)对点之间可达,询问权值最小为多少 \(n \leqslant 30, m \leqslant 1000\) 首先看数据范围,\ ...
- BZOJ2595: [Wc2008]游览计划(斯坦纳树,状压DP)
Time Limit: 10 Sec Memory Limit: 256 MBSec Special Judge Submit: 2030 Solved: 986 [Submit][Status ...
- BZOJ 4006 Luogu P3264 [JLOI2015]管道连接 (斯坦纳树、状压DP)
题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=4006 (luogu)https://www.luogu.org/probl ...
- bzoj 2131: 免费的馅饼(树状数组+DP)
2131: 免费的馅饼 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 408 Solved: 245 [Submit][Status][Discu ...
- bzoj 4479: [Jsoi2013]吃货jyy 欧拉回路+状压dp
题意 世界上一共有N个JYY愿意去的城市,分别从1编号到N.JYY选出了K个他一定要乘坐的航班.除此之外,还有M个JYY没有特别的偏好,可以乘坐也可以不乘坐的航班. 一个航班我们用一个三元组(x,y, ...
- [BZOJ 1076][SCOI2008]奖励关(期望+状压Dp)
Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...
- bzoj 3824: [Usaco2014 Dec]Guard Mark【状压dp】
设f[s]为已经从上到下叠了状态为s的牛的最大稳定度,转移的话枚举没有在集合里并且强壮度>=当前集合牛重量和的用min(f[s],当前放进去的牛还能承受多种)来更新,高度的话直接看是否有合法集合 ...
- 业界萌新对斯坦纳树的小结
业界萌新对斯坦纳树的小结 0.简介 斯坦纳树问题是组合优化问题,与最小生成树相似,是最短网络的一种.最小生成树是在给定的点集和边中寻求最短网络使所有点连通.而最小斯坦纳树允许在给定点外增加额外的点,使 ...
- [bzoj4006][JLOI2015]管道连接_斯坦纳树_状压dp
管道连接 bzoj-4006 JLOI-2015 题目大意:给定一张$n$个节点$m$条边的带边权无向图.并且给定$p$个重要节点,每个重要节点都有一个颜色.求一个边权和最小的边集使得颜色相同的重要节 ...
最新文章
- R对数秩检验(log rank test)
- 在Forge Viewer上显示自订义属性
- DVWA演练平台之SQL注入(全新认识)
- 中国企业云计算应用现状及需求
- in ms sql 集合参数传递_神奇的 SQL → 为什么 GROUP BY 之后不能直接引用原表中的列?...
- java虚拟机相同吗_Java虚拟机是否真的是与VMWare或Parallels文件相同的虚拟机?
- You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property
- 国内外黑客居然都在这些地方聚集
- log4j教程_Log4j教程
- 用windows通过xrdp远程连接到ubuntu16后 Tab键无法使用
- php数组中去掉空格,php数组如何去除空格
- Springboot JUnit5 Controller 单元测试
- http-server 简介
- 项目中 前后台接口 请求项目移植的问题
- 你也能成为 “最强大脑”
- 使用cmd命令笔记本电池查看电池寿命
- 在工作流中,设置了智能选人,但在工作流转交下一步仍无法自动选择人员?
- menubar的相关用法
- Arduino入门篇——继电器控制风扇
- 概论_第4章__协方差Cov(X)的定义和性质___相关系数的定义和性质
热门文章
- jq 和java 多张图片_JQ实现多图片预览和单图片预览
- FreeSql实体映射成数据库,数据库映射成实体类,指定表生成实体
- mysql 建立索引_mysql建立索引的原则
- css 圆点样式 优惠券样子
- html angular video视频组件
- 基于php的医院管理,基于PHP的医院管理信息系统的设计与实现
- impala的substr从第几位截到最后一位_冰雪奇缘2彩蛋:片名内含深意,艾莎是第13位公主象征着背叛...
- 发送get请求php,如何利用PHP发送GET请求
- 无线网络的网速很慢_手机信号强,网速慢?你这样设置,网速如飞!快到不可思议...
- python pipeline框架_爬虫(十六):Scrapy框架(三) Spider Middleware、Item Pipeline|python基础教程|python入门|python教程...