【洛谷】 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个集合 各个集合要在图中形成联通块 边有边权 求最小代价. 其实还是生成树问题 某个点要和某个点要在生成树中 类似这个意思. 可以发现 是斯坦纳树 ...
随机推荐
- Windows 7 控制面板Update选项灰色解决办法
具体解决方法是开始-运行-regedit,打开注册表编辑器,在注册表里找: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows,展开Windo ...
- 性状、生成器、闭包、OPcache【Modern PHP】
目录 性状 Trait 生成器 闭包 Zend OPcache PHP发展这么多年,技术.架构都已经革新,了解现代PHP很重要,最近在看Model PHP这本书,系统的了解下PHP相关的概念. 性状 ...
- codeforces 407C Curious Array
codeforces 407C Curious Array UPD: 我觉得这个做法比较好理解啊 参考题解:https://www.cnblogs.com/ChopsticksAN/p/4908377 ...
- GTK+开发环境搭建
GTK+开发环境搭建 "工欲善其事,必先利其器"首先介绍一下GTK+开发环境的搭建,网上很多所谓的GTK的开发环境的搭建基本都是抄来抄去,也不知道有没有人使用他们介绍的方法搭建并编 ...
- python选课系统
程序名称: 选课系统 角色:学校.学员.课程.讲师 要求: 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海 ...
- python 中logging的日志封装
因为最近在做平台,发现有同事,使用django封装了日志模块,看样子很简单,准备自己单独做了一个日志封装模板,对于python不熟练的我,封装部分参考了多个博主的内容,形成自己的日志模块,内容如下: ...
- php-fpm配置参数.md
Global Options pid string PID文件的位置.默认为空.默认路径放在/usr/local/php-fpm/var. error_log string 错误日志的位置.默认:安装 ...
- SOJ 1085 SCU 简单计算几何
BackGroud Year 2003不知你是否注意到,四川大学每年都会在各宿舍楼里放老鼠药,以解决学生宿舍的老鼠问题. 今年,学校的领导为了更好的展开灭鼠的行动,引进了一项新的技术:SCU(Supe ...
- Debian下Cannot set LC_CTYPE to default locale: No such file or directory解决方法
把语言环境变量改为英文 将Ubuntu系统语言环境改为英文的en_US.UTF-8 查看当前系统语言环境 locale 编辑配置文件,将zh_US.UTF-8改为en_US.UTF-8,zh改为en ...
- CSS样式命名规则
1.样式命名外 套: wrap主导航: mainnav子导航: subnav页 脚: footer整个页面: content页 眉: header页 脚: footer商 标: label标 题: t ...