题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4006

除了模板,就是记录 ans[ s ] 表示 s 合法的最小代价。合法即保证 s 里同一种的连通,整体可以不连通。ans[  ] 也枚举子集转移即可,初值就是模板算出来的 dp[ ][ s ] 最小值。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
int Mn(int a,int b){return a<b?a:b;}
int Mx(int a,int b){return a>b?a:b;}
const int N=,M=,K=,Lm=(<<)+,INF=6e7+;
int n,m,cnt,hd[N],xnt,to[M<<],nxt[M<<],w[M<<];
int col[K],dy[K],tot,ct[K],bin[K];
int dp[N][Lm],ans[Lm];bool b[Lm],ins[N];
queue<int> q;
void add(int x,int y,int z){to[++xnt]=y;nxt[xnt]=hd[x];hd[x]=xnt;w[xnt]=z;}
void b_init()
{
for(int s=;s<bin[cnt];s++)
{
int tct[K]={};
for(int i=;i<cnt;i++)
if(s&bin[i])tct[col[i+]]++;
b[s]=;
for(int i=;i<=tot;i++)if(tct[i]&&tct[i]<ct[i]){b[s]=;break;}
}
}
void spfa(int s)
{
for(int i=;i<=n;i++)q.push(i),ins[i]=;
while(q.size())
{
int k=q.front();q.pop();ins[k]=;
for(int i=hd[k],v;i;i=nxt[i])
if(dp[v=to[i]][s]>dp[k][s]+w[i])
{
dp[v][s]=dp[k][s]+w[i];
if(!ins[v])q.push(v),ins[v]=;
}
}
}
int main()
{
n=rdn();m=rdn();cnt=rdn();
for(int i=,u,v,z;i<=m;i++)
u=rdn(),v=rdn(),z=rdn(),add(u,v,z),add(v,u,z);
memset(dp,0x3f,sizeof dp);
bin[]=;for(int i=;i<=cnt;i++)bin[i]=bin[i-]<<;
for(int i=;i<=cnt;i++)
{
int c=rdn();int d=rdn();
if(!dy[c])dy[c]=++tot; col[i]=dy[c]; ct[col[i]]++;
dp[d][bin[i-]]=;//[d]not[i]
}
b_init(); memset(ans,0x3f,sizeof ans);
for(int s=;s<bin[cnt];s++)
{
for(int i=;i<=n;i++)
for(int d=(s-)&s;d;d=(d-)&s)
dp[i][s]=Mn(dp[i][s],dp[i][d]+dp[i][s^d]);
spfa(s);
for(int i=;i<=n;i++)ans[s]=Mn(ans[s],dp[i][s]);
}
for(int s=;s<bin[cnt];s++)
{
if(!b[s])continue;
for(int d=(s-)&s;d;d=(d-)&s)
if(b[d])ans[s]=Mn(ans[s],ans[d]+ans[s^d]);
}
printf("%d\n",ans[bin[cnt]-]);
return ;
}

bzoj 4006 [JLOI2015]管道连接——斯坦纳树的更多相关文章

  1. BZOJ4006 JLOI2015 管道连接(斯坦纳树生成森林)

    4006: [JLOI2015]管道连接 Time Limit: 30 Sec Memory Limit: 128 MB Description 小铭铭最近进入了某情报部门,该部门正在被如何建立安全的 ...

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

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

  3. 【BZOJ4774/4006】修路/[JLOI2015]管道连接 斯坦纳树

    [BZOJ4774]修路 Description 村子间的小路年久失修,为了保障村子之间的往来,法珞决定带领大家修路.对于边带权的无向图 G = (V, E),请选择一些边,使得1 <= i & ...

  4. BZOJ4006: [JLOI2015]管道连接(斯坦纳树,状压DP)

    Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1171  Solved: 639[Submit][Status][Discuss] Descripti ...

  5. 【bzoj4006】[JLOI2015]管道连接 斯坦纳树+状压dp

    题目描述 给出一张 $n$ 个点 $m$ 条边的无向图和 $p$ 个特殊点,每个特殊点有一个颜色.要求选出若干条边,使得颜色相同的特殊点在同一个连通块内.输出最小边权和. 输入 第一行包含三个整数 n ...

  6. 洛谷P3264 [JLOI2015]管道连接 (斯坦纳树)

    题目链接 题目大意:有一张无向图,每条边有一定的花费,给出一些点集,让你从中选出一些边,用最小的花费将每个点集内的点相互连通,可以使用点集之外的点(如果需要的话). 算是斯坦纳树的入门题吧. 什么是斯 ...

  7. bzoj 4006 [JLOI2015]管道连接(斯坦纳树+状压DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4006 [题意] 给定n点m边的图,连接边(u,v)需要花费w,问满足使k个点中同颜色的 ...

  8. BZOJ 4006 [JLOI2015]管道连接(斯坦纳树+子集DP)

    明显是一道斯坦纳树的题. 然而这题只需要属性相同的点互相连接. 我们还是照常先套路求出\(ans[s]\). 然后对\(ans[s]\)做子集DP即可. 具体看代码. #include<iost ...

  9. bzoj 4006 管道连接 —— 斯坦纳树+状压DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4006 用斯坦纳树求出所有关键点的各种连通情况的代价,把这个作为状压(压的是集合选择情况)的初 ...

随机推荐

  1. Linux下停止没有关闭的远程登陆终端

    脚本如下: #!/bin/shTTY_LOG=tty_logTTY_LOG1=tty_log1USER_NAME=`whoami`#echo ${USER_NAME}who|grep ${USER_N ...

  2. postman中如何使用OAuth

    https://learning.getpostman.com/docs/postman/sending_api_requests/authorization/ Authorization The a ...

  3. git squash 和 git rebase

    In git, what is the difference between merge --squash and rebase? 上面链接的回答中的总结: Both git merge --squa ...

  4. (CLR via C#学习笔记)异步操作 - 线程池

    一 线程池基础 1.线程池维护了一个操作请求队列,将请求的操作追加到线程池队列中,线程池的代码从队列中提取操作项,派发给线程池中的线程; 2.CLR初始化时,线程池中是没有线程的,当有操作派发给线程池 ...

  5. tenserflow models包的安装 123

    1.下载 models包 https://github.com/tensorflow/models 2.将models包拷贝到本机Python包的安装地址即可,本机Python包的安装地址的查看方式可 ...

  6. Libpacp 深度剖析

    Libpacp 深度剖析 1. Libpacp 的工作原理 ​ Libpcap的工作原理可以描述为,当一个数据包到达网卡时,通过网络分接口(即旁路机制)将数据包发给BPF过滤器,匹配通过的数据包可以被 ...

  7. vue 点击按钮 input框架获取焦点的方法

    在按钮事件里加上这一段this.$nextTick(() =>{ this.$refs.input.focus()})

  8. OAF 设置右对齐

    public void setAllColsFormat(OAPageContext paramOAPageContext, OAWebBean paramOAWebBean) { OATableBe ...

  9. Django rest framework源码分析(一) 认证

    一.基础 最近正好有机会去写一些可视化的东西,就想着前后端分离,想使用django rest framework写一些,顺便复习一下django rest framework的知识,只是顺便哦,好吧. ...

  10. gradle基础配置

    gradle构建脚本基础 gradle常用命令 //列出项目的所有属性. 这样你就可以看到插件加入的属性以及它们的默认值. gradle properties ​ //列出项目的所有任务 gradle ...