题目: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相关推荐

  1. bzoj1402 Ticket to Ride 斯坦纳树 + 状压dp

    给定\(n\)个点,\(m\)条边的带权无向图 选出一些边,使得\(4\)对点之间可达,询问权值最小为多少 \(n \leqslant 30, m \leqslant 1000\) 首先看数据范围,\ ...

  2. BZOJ2595: [Wc2008]游览计划(斯坦纳树,状压DP)

    Time Limit: 10 Sec  Memory Limit: 256 MBSec  Special Judge Submit: 2030  Solved: 986 [Submit][Status ...

  3. BZOJ 4006 Luogu P3264 [JLOI2015]管道连接 (斯坦纳树、状压DP)

    题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=4006 (luogu)https://www.luogu.org/probl ...

  4. bzoj 2131: 免费的馅饼(树状数组+DP)

    2131: 免费的馅饼 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 408  Solved: 245 [Submit][Status][Discu ...

  5. bzoj 4479: [Jsoi2013]吃货jyy 欧拉回路+状压dp

    题意 世界上一共有N个JYY愿意去的城市,分别从1编号到N.JYY选出了K个他一定要乘坐的航班.除此之外,还有M个JYY没有特别的偏好,可以乘坐也可以不乘坐的航班. 一个航班我们用一个三元组(x,y, ...

  6. [BZOJ 1076][SCOI2008]奖励关(期望+状压Dp)

    Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...

  7. bzoj 3824: [Usaco2014 Dec]Guard Mark【状压dp】

    设f[s]为已经从上到下叠了状态为s的牛的最大稳定度,转移的话枚举没有在集合里并且强壮度>=当前集合牛重量和的用min(f[s],当前放进去的牛还能承受多种)来更新,高度的话直接看是否有合法集合 ...

  8. 业界萌新对斯坦纳树的小结

    业界萌新对斯坦纳树的小结 0.简介 斯坦纳树问题是组合优化问题,与最小生成树相似,是最短网络的一种.最小生成树是在给定的点集和边中寻求最短网络使所有点连通.而最小斯坦纳树允许在给定点外增加额外的点,使 ...

  9. [bzoj4006][JLOI2015]管道连接_斯坦纳树_状压dp

    管道连接 bzoj-4006 JLOI-2015 题目大意:给定一张$n$个节点$m$条边的带边权无向图.并且给定$p$个重要节点,每个重要节点都有一个颜色.求一个边权和最小的边集使得颜色相同的重要节 ...

最新文章

  1. R对数秩检验(log rank test)
  2. 在Forge Viewer上显示自订义属性
  3. DVWA演练平台之SQL注入(全新认识)
  4. 中国企业云计算应用现状及需求
  5. in ms sql 集合参数传递_神奇的 SQL → 为什么 GROUP BY 之后不能直接引用原表中的列?...
  6. java虚拟机相同吗_Java虚拟机是否真的是与VMWare或Parallels文件相同的虚拟机?
  7. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property
  8. 国内外黑客居然都在这些地方聚集
  9. log4j教程_Log4j教程
  10. 用windows通过xrdp远程连接到ubuntu16后 Tab键无法使用
  11. php数组中去掉空格,php数组如何去除空格
  12. Springboot JUnit5 Controller 单元测试
  13. http-server 简介
  14. 项目中 前后台接口 请求项目移植的问题
  15. 你也能成为 “最强大脑”
  16. 使用cmd命令笔记本电池查看电池寿命
  17. 在工作流中,设置了智能选人,但在工作流转交下一步仍无法自动选择人员?
  18. menubar的相关用法
  19. Arduino入门篇——继电器控制风扇
  20. 概论_第4章__协方差Cov(X)的定义和性质___相关系数的定义和性质

热门文章

  1. jq 和java 多张图片_JQ实现多图片预览和单图片预览
  2. FreeSql实体映射成数据库,数据库映射成实体类,指定表生成实体
  3. mysql 建立索引_mysql建立索引的原则
  4. css 圆点样式 优惠券样子
  5. html angular video视频组件
  6. 基于php的医院管理,基于PHP的医院管理信息系统的设计与实现
  7. impala的substr从第几位截到最后一位_冰雪奇缘2彩蛋:片名内含深意,艾莎是第13位公主象征着背叛...
  8. 发送get请求php,如何利用PHP发送GET请求
  9. 无线网络的网速很慢_手机信号强,网速慢?你这样设置,网速如飞!快到不可思议...
  10. python pipeline框架_爬虫(十六):Scrapy框架(三) Spider Middleware、Item Pipeline|python基础教程|python入门|python教程...