【洛谷】 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个集合 各个集合要在图中形成联通块 边有边权 求最小代价. 其实还是生成树问题 某个点要和某个点要在生成树中 类似这个意思. 可以发现 是斯坦纳树 ...
随机推荐
- nginx+php+swoole安装记录
领了台阿里服务器1vCPU 1G,做下测试研究. 系统 centos7,使用yum安装. Nginx yum install nginx ##开启nginx service nginx start 安 ...
- Samba文件共享服务器配置
Samba起源: 早期网络想要在不同主机之间共享文件大多要用FTP协议来传输,但FTP协议仅能做到传输文件却不能直接修改对方主机的资料数据,这样确实不太方便,于是便出现了NFS开源文件共享程序:NFS ...
- Android App性能优化(一)之布局优化
当创建复杂布局的时候,我们会在xml 文件中添加大量的ViewGroup和View.伴随着每次迭代,View树的层次越来越深,界面加载速度越来越慢,消耗的内存也越来越多.当您的程序出现加载时短暂黑屏或 ...
- SharePoint2007深入浅出——使用jQuery UI
jQuery1.6.4.js + jQuery UI 1.8.16.js 只有这个版本在IE8下的兼容性视图+Quirks(文本模式),dialog可以正常显示.
- 【2017.10.13 ROS机器人操作系统】ROS系统常用术语及资源
ROS机器人操作系统是一种后操作系统,提供了类似于软件开发中使用到的中间件的功能. ROS: Robot Operating System 机器人操作系统 Package: 功能包 Stack: 功能 ...
- easy_encode_decode
s = input("输入:") result = '' for i in range(len(s)): result += chr(ord(s[i])^2000) print(r ...
- Sublime 正则替换
打开替换的窗口 在Find What 写入待匹配的正则表达式,然后在Replace With写上要替换的内容($1代表第一个括号内内容,依次类推) 然后选择对应的选项
- 设置python的默认编码方式为utf-8
在python的Lib\site-packages文件夹下新建一个sitecustomize.py,然后通过sys.getdefaultencoding()获取当前的默认编码 内容为:
- BZOJ2761:[JLOI2011]不重复数字(map)
Description 给出N个数,要求把其中重复的去掉,只保留第一次出现的数. 例如,给出的数为1 2 18 3 3 19 2 3 6 5 4,其中2和3有重复,去除后的结果为1 2 18 3 19 ...
- 20155328 2016-2017-2 《Java程序设计》第九周学习总结
20155328 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 16.1 JDBC入门 JDBC是Java联机数据库的标准规范,定义一组标准类与接口,应用程 ...