BZOJ_4006_[JLOI2015]管道连接_斯坦纳树
BZOJ_4006_[JLOI2015]管道连接_斯坦纳树
题意:
小铭铭最近进入了某情报部门,该部门正在被如何建立安全的通道连接困扰。
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 1050
#define M 6050
int head[N],to[M],nxt[M],val[M],n,m,p,cnt,inq[N];
int dis[1025][N],Q[N],l,r,d[11],s[11];
int f[1025],g[1025],mask,tnl,is[11];
inline void add(int u,int v,int w){
to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;val[cnt]=w;
}
struct A{
int id,num,rnum;
}b[11];
bool cmp1(const A &x,const A &y){
return x.rnum<y.rnum;
}
bool cmp2(const A &x,const A &y){
return x.id<y.id;
}
void stan(){
int i,j,k;
memset(dis,0x3f,sizeof(dis));
for(i=1;i<=p;i++){
dis[1<<i-1][d[i]]=0;
}
for(j=1;j<=mask;j++){
for(i=1;i<=n;i++){
for(k=j&(j-1);k;k=j&(k-1)){
dis[j][i]=min(dis[j][i],dis[k][i]+dis[j-k][i]);
}
}
l=r=0;
for(i=1;i<=n;i++){
Q[r++]=i;inq[i]=1;
}
while(l^r){
int x=Q[l++];inq[x]=0;if(l==n+1)l=0;
for(k=head[x];k;k=nxt[k]){
if(dis[j][to[k]]>dis[j][x]+val[k]){
dis[j][to[k]]=dis[j][x]+val[k];
if(!inq[to[k]]){
inq[to[k]]=1;Q[r++]=to[k];if(r==n+1)r=0;
}
}
}
}
}
}
int main(){
scanf("%d%d%d",&n,&m,&p);
mask=(1<<p)-1;
int i,j,x,y,z,k;
for(i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);add(y,x,z);
}
for(i=1;i<=p;i++){
scanf("%d%d",&b[i].rnum,&d[i]);
b[i].id=i;
}
sort(b+1,b+p+1,cmp1);
b[0].rnum=-10000;
for(i=1;i<=p;i++){
if(b[i].rnum==b[i-1].rnum){
b[i].num=b[i-1].num;
}else b[i].num= ++tnl;
}
sort(b+1,b+p+1,cmp2);
for(i=1;i<=p;i++){
s[b[i].num]|=(1<<i-1);
}
stan();
memset(f,0x3f,sizeof(f));
memset(g,0x3f,sizeof(g));
for(i=0;i<=mask;i++){
for(j=1;j<=n;j++){
f[i]=min(f[i],dis[i][j]);
}
}
for(i=0;i<=mask;i++){
k=0;
for(j=1;j<=p;j++){
if(i&(1<<j-1)){
k|=s[b[j].num];
}
}
g[i]=f[k];
}
for(i=0;i<=mask;i++){
for(j=i&(i-1);j;j=i&(j-1)){
g[i]=min(g[i],g[j]+g[i-j]);
}
}
printf("%d\n",g[mask]);
}
BZOJ_4006_[JLOI2015]管道连接_斯坦纳树的更多相关文章
- [bzoj4006][JLOI2015]管道连接_斯坦纳树_状压dp
管道连接 bzoj-4006 JLOI-2015 题目大意:给定一张$n$个节点$m$条边的带边权无向图.并且给定$p$个重要节点,每个重要节点都有一个颜色.求一个边权和最小的边集使得颜色相同的重要节 ...
- bzoj 4006 [JLOI2015]管道连接(斯坦纳树+状压DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4006 [题意] 给定n点m边的图,连接边(u,v)需要花费w,问满足使k个点中同颜色的 ...
- BZOJ 4006 [JLOI2015]管道连接(斯坦纳树+子集DP)
明显是一道斯坦纳树的题. 然而这题只需要属性相同的点互相连接. 我们还是照常先套路求出\(ans[s]\). 然后对\(ans[s]\)做子集DP即可. 具体看代码. #include<iost ...
- 【bzoj4006】[JLOI2015]管道连接(斯坦纳树+dp)
题目链接 题意: 给出\(n\)个点,\(m\)条边,同时给出\(p\)个重要的点以及对应特征. 现在要选出一些边,问使得这\(p\)个所有特征相同的点相连,问最小代价. 思路: 斯坦纳树的应用场景一 ...
- 洛谷P3264 [JLOI2015]管道连接(斯坦纳树)
传送门 感觉对斯坦纳树还是有很多疑惑啊…… 等到时候noip没有爆零的话再回来填坑好了 //minamoto #include<iostream> #include<cstdio&g ...
- [JLOI2015]管道连接(斯坦纳树)
[Luogu3264] 原题解 多个频道,每个频道的关键点要求相互联通 详见代码,非常巧妙 #include<cstdio> #include<iostream> #inclu ...
- BZOJ_2595_[Wc2008]游览计划_斯坦纳树
BZOJ_2595_[Wc2008]游览计划_斯坦纳树 题意: 分析: 斯坦纳树裸题,有几个需要注意的地方 给出矩阵,不用自己建图,但枚举子集转移时会算两遍,需要减去当前点的权值 方案记录比较麻烦,两 ...
- BZOJ4006 JLOI2015 管道连接(斯坦纳树生成森林)
4006: [JLOI2015]管道连接 Time Limit: 30 Sec Memory Limit: 128 MB Description 小铭铭最近进入了某情报部门,该部门正在被如何建立安全的 ...
- [BZOJ4006][JLOI2015]管道连接 状压dp+斯坦纳树
4006: [JLOI2015]管道连接 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 1020 Solved: 552[Submit][Statu ...
随机推荐
- 使用 Helm - 每天5分钟玩转 Docker 容器技术(163)
Helm 安装成功后,可执行 helm search 查看当前可安装的 chart. 这个列表很长,这里只截取了一部分.大家不禁会问,这些 chart 都是从哪里来的? 前面说过,Helm 可以像 a ...
- 零基础自学Python十天,写了一款猜数字小游戏,附源码和软件下载链接!
自学一门语言最重要的是要及时给自己反馈,那么经常写一些小程序培养语感很重要,写完可以总结一下程序中运用到了哪些零散的知识点. 本程序中运用到的知识点有: 1.输入输出函数 (input.print) ...
- (转)TCP协议与UDP协议的区别
TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...
- oracle 游标简单示例
1.游标的概念以及作用 游标(Cursor)可以使用户想操作数组一样对查询出来的结果集进行操作,可以形象的看做一个变动的光标,其实际行是一个指针,它在一段Oracle存放数据查询结果集或数据 操作集的 ...
- 用一张表里的记录更新自己(或另一张表)里的记录(exists使用)
update jqhdzt set shid=(select shid from v_plat_userjqinfo t where jqhdzt.jqbh=t.JQBH and jqhdzt.shi ...
- linux基础-系统安装教程篇(centos6.5)
一.linux系统简介: Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程 ...
- 小程序从后台输出的代码为HTML实体字符如何解决?
最近在做一个小程序的考试系统,从后台调出的数据是这个样子的 那么我遇到这个问题的时候想到的微信小程序的富文本即(wxParse),使用过wxParse的都知道,富文本必须得具体到单个的数据上才能使用, ...
- vue 路由嵌套高亮问题
正常路由嵌套是没有问题的,但是如果你已经在当前主路由页面了,然后再次点击主路由就会出现页面数据空白的情况 看代码: //主路由通过v-for循环出来 <div class="list- ...
- javascript中的隐式类型转化
javascript中的隐式类型转化 #隐式转换 ## "+" 字符串和数字 如果某个操作数是字符串或者能够通过以下步骤转换为字符串的话,+将进行拼接操作. 如果其中一个操作数是对 ...
- PAT1105:Spiral Matrix
1105. Spiral Matrix (25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue This ti ...