【洛谷】 3264 [JLOI2015] 管道连接
方程:Ans(S)= minx(Ans(S),dp(i,S));
而加上频率的限制:
可以看出我们完全不用连边 2-5,因为这条边不改变相同频率的连通性!
所以带条件 Ans(S)经过DP更新后一定是最优解,并且保证没有额外边。
代码:
#include <bits/stdc++.h>
std :: queue < int > q ;
const int N = + ;
struct node {
int id , clr ;
}
dot [ ] ;
int head [ N << ] , nxt [ N << ] , dis [ N << ] , to [ N << ] , cn ;
int dp [ N ] [ << ] , ans [ << ] , cnt [ ] , sum [ ] , n , m , p , S , x , y , w , inf ;
bool vis [ N ] , ck [ << ] ;
int minx ( int a , int b ) {
return a > b ? b : a ;
}
void create ( int u , int v , int d ) {
cn ++ ;
to [ cn ] = v ;
dis [ cn ] = d ;
nxt [ cn ] = head [ u ] ;
head [ u ] = cn ;
}
void spfa ( int S ) {
for ( int i = ; i <= n ; i ++ )
if ( dp [ i ] [ S ] < inf )
vis [ i ] = true , q . push ( i ) ;
while ( ! q . empty ( ) ) {
int v , tmp = q . front ( ) ;
q . pop ( ) ; vis [ tmp ] = false ;
for ( int i = head [ tmp ] ; i ; i = nxt [ i ] ) {
v = to [ i ] ;
if ( dp [ v ] [ S ] > dp [ tmp ] [ S ] + dis [ i ] ) {
dp [ v ] [ S ] = dp [ tmp ] [ S ] + dis [ i ] ;
if ( ! vis [ v ] ) {
vis [ v ] = true ;
q . push ( v ) ;
}
}
}
}
}
bool check ( int S ) {
memset ( cnt , , sizeof ( cnt ) ) ;
for ( int i = ; i <= p ; i ++ )
if ( S & ( << ( i - ) ) )
cnt [ dot [ i ] . clr ] ++ ;
for ( int i = ; i <= ; i ++ )
if ( cnt [ i ] && cnt [ i ] != sum [ i ] )
return ;
return ;
}
int main ( ) {
scanf ( "%d%d%d" , & n , & m , & p ) ;
memset ( dp , / , sizeof ( dp ) ) ;
inf = dp [ ] [ ] ;
S = ( << p ) - ;
for ( int i = ; i <= m ; i ++ ) {
scanf ( "%d%d%d" , & x , & y , & w ) ;
create ( x , y , w ) ;
create ( y , x , w ) ;
}
for ( int i = ; i <= p ; i ++ ) {
scanf ( "%d%d" , & dot [ i ] . clr , & dot [ i ] . id ) ;
sum [ dot [ i ] . clr ] ++ ;
}
for ( int i = ; i <= p ; i ++ )
dp [ dot [ i ] . id ] [ << ( i - ) ] = ;
for ( int s = ; s <= S ; s ++ ) {
for ( int i = ; i <= n ; i ++ )
for ( int s1 = s ; s1 ; s1 = ( s1 - ) & s )
dp [ i ] [ s ] = minx ( dp [ i ] [ s ] , dp [ i ] [ s1 ] + dp [ i ] [ s ^ s1 ] ) ;
spfa ( s ) ;
}
memset ( ans , / , sizeof ( ans ) ) ;
for ( int s = ; s <= S ; s ++ )
for ( int i = ; i <= n ; i ++ )
ans [ s ] = minx ( ans [ s ] , dp [ i ] [ s ] ) ;
for ( int s1 = ; s1 <= S ; s1 ++ )
if ( check ( s1 ) )
ck [ s1 ] = true ;
for ( int s = ; s <= S ; s ++ )
if ( ck [ s ] )
for ( int s1 = s ; s1 ; s1 = ( s1 - ) & s )
if ( ck [ s1 ] )
ans [ s ] = minx ( ans [ s ] , ans [ s1 ] + ans [ s ^ s1 ] ) ;
printf ( "%d" , ans [ S ] ) ;
return ;
}
Ans for this
要开O2,因为STL队列很慢。
【洛谷】 3264 [JLOI2015] 管道连接的更多相关文章
- 洛谷P3264 [JLOI2015]管道连接(斯坦纳树)
传送门 感觉对斯坦纳树还是有很多疑惑啊…… 等到时候noip没有爆零的话再回来填坑好了 //minamoto #include<iostream> #include<cstdio&g ...
- 洛谷P3264 [JLOI2015]管道连接 (斯坦纳树)
题目链接 题目大意:有一张无向图,每条边有一定的花费,给出一些点集,让你从中选出一些边,用最小的花费将每个点集内的点相互连通,可以使用点集之外的点(如果需要的话). 算是斯坦纳树的入门题吧. 什么是斯 ...
- BZOJ4006 JLOI2015 管道连接(斯坦纳树生成森林)
4006: [JLOI2015]管道连接 Time Limit: 30 Sec Memory Limit: 128 MB Description 小铭铭最近进入了某情报部门,该部门正在被如何建立安全的 ...
- BZOJ_4006_[JLOI2015]管道连接_斯坦纳树
BZOJ_4006_[JLOI2015]管道连接_斯坦纳树 题意: 小铭铭最近进入了某情报部门,该部门正在被如何建立安全的通道连接困扰. 该部门有 n 个情报站,用 1 到 n 的整数编号.给出 m ...
- [BZOJ4006][JLOI2015]管道连接 状压dp+斯坦纳树
4006: [JLOI2015]管道连接 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 1020 Solved: 552[Submit][Statu ...
- [bzoj4006][JLOI2015]管道连接_斯坦纳树_状压dp
管道连接 bzoj-4006 JLOI-2015 题目大意:给定一张$n$个节点$m$条边的带边权无向图.并且给定$p$个重要节点,每个重要节点都有一个颜色.求一个边权和最小的边集使得颜色相同的重要节 ...
- 洛谷 P3263 [JLOI2015]有意义的字符串
洛谷 首先,看到\((\frac{(b+\sqrt{d})}{2})^n\),很快能够想到一元二次方程的解\(\frac{-b\pm\sqrt{\Delta}}{2a}\). 所以可以推出,\(\fr ...
- BZOJ 4006 Luogu P3264 [JLOI2015]管道连接 (斯坦纳树、状压DP)
题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=4006 (luogu)https://www.luogu.org/probl ...
- luogu P3264 [JLOI2015]管道连接
LINK:管道连接 一张无向图 有P个关键点 其中有K个集合 各个集合要在图中形成联通块 边有边权 求最小代价. 其实还是生成树问题 某个点要和某个点要在生成树中 类似这个意思. 可以发现 是斯坦纳树 ...
随机推荐
- 多变量线性回归 matlab
%multivariate_linear_regression data=load('data.txt'); x=data(:,1:2); y=data(:,3); m=length(x(:,1)); ...
- matlab 黑白格子
有一个生成黑白格子的函数 40 这个参数是改变大小的 img=checkerboard(40)<0.5; figure; imshow(img,[])
- 双十一问题:在洪峰数据来临的瞬间,redis出现连接超时异常
如图所示,在大数据量来袭时,部署服务的机器中存在一台机器突然出现该报错,并且一直持续下去,直到洪峰数据结束也未恢复,重启机器后该问题解决 原因分析: 在请求redis过多时,因为未及时的释放掉redi ...
- Java日期格式化参数对照表
Symbol Meaning Presentation Example G era designator Text AD y year Number 2009 M month in year Text ...
- Iptables教程
iptables防火墙简介 Iptables也叫netfilter是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入.流出.流经服务器的数据包进行精 ...
- 前端工程师使用 Deepin 笔记
笔者是一枚前端开发,在学习 Linux 的时候碰到了一个问题 —— 怎么练手?因为自己电脑上面装的是 Windows 系统,所以学习 Linux 的时候没办法进行练习,而敲指令是学习 Linux 最高 ...
- Excel对同样项求和
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/yeweiouyang/article/details/32107423 方法一(SUMIF公式求和) ...
- 「BZOJ3226」[Sdoi2008]校门外的区间
题目 首先是开闭区间的处理,我们把\(1.5\)这种数加进来,用\([1.5,6]\)来表示\((2,6]\) 根据离散数学的基本知识,尝试把五个操作转化成人话 把\([x,y]\)变成\(1\) 把 ...
- mavenWeb工程建立步骤
1.File >> New >>other...,在New窗口中打开Maven,选中Maven Project,Next. 2.在New Maven Project弹出窗口中去 ...
- EasyConnect 使用方法
一.此处以安卓系统为例进行介绍. 1.通过谷歌市场下载 EasyConnect,安装完成后,打开EasyConnect,界面如下图 1 所示 <ignore_js_op> 2.输入 SSL ...