P4854 MloVtry的咸鱼树 状压+最短路】的更多相关文章

$ \color{#0066ff}{ 题目描述 }$ 俗话说种瓜得瓜,种豆得豆,MloVtry把自己砍掉一半埋进了土里,于是它得到了一颗n个点的咸鱼树. 但是问题是由于MloVtry只舍得埋下一半的自己,所以这个咸鱼树是不完整的---甚至它碎裂成了m条边. 作为一条能够致癌的咸鱼,MloVtry当然想要一颗咸鱼树来标榜自己的身份. MloVtry大概估计出了连接两个点之间的代价,它想知道,最少需要多少代价才能拼出咸鱼树? 值得注意的是,咸鱼树上的咸鱼边们对于MloVtry是很有意见的,所以每条边…
题目描述 给出一张 $n$ 个点 $m$ 条边的无向图和 $p$ 个特殊点,每个特殊点有一个颜色.要求选出若干条边,使得颜色相同的特殊点在同一个连通块内.输出最小边权和. 输入 第一行包含三个整数 n;m;p,表示情报站的数量,可以建立的通道数量和重要情报站的数 量.接下来 m 行,每行包含三个整数 ui;vi;wi,表示可以建立的通道.最后有 p 行,每行包含 两个整数 ci;di,表示重要情报站的频道和情报站的编号. 输出 输出一行一个整数,表示任意相同频道的情报站之间都建立通道连接所花费的…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4006 [题意] 给定n点m边的图,连接边(u,v)需要花费w,问满足使k个点中同颜色的点都连通的最小费用. [思路] 题目所求斯坦纳森林. 如果我们知道满足颜色集合S连通的最小值g[S],则有转移式: G[S]=min{ g[s] , G[S’]+G[S-S’] } 则G[(1<<C)-1]即答案,G[S]定义为使得颜色集合S中所有相同颜色的点都连通的最小值. 这里的g[S],其实…
题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1673 建一个虚树. 一种贪心的想法是把较小的值填到叶子上,这样一个小值限制到的叶子比较少. 但不太会贪心了,所以考虑 DP .只有 20 个叶子,(不是用来暴搜的!)可以状压DP了. dp[ S ]表示选了点集 S 的叶子的方案数.再记一个 ct[ S ] 表示选这个点集的叶子.不影响到其他叶子,最多可以填几个点. dp[ S ]可以枚举最后一个填的是哪个叶子来转移:ct[…
http://acm.hdu.edu.cn/showproblem.php?pid=5023 在片段上着色,有两种操作,如下: 第一种:P a b c 把 a 片段至 b 片段的颜色都变为 c . 第二种:Q a b 询问 a 片段至 b 片段有哪些颜色,把这些颜色按从小到大的编号输出,不要有重复 片段上默认的初始颜色为编号2的颜色. 颜色30种,状压:线段树进行更新和询问 #include <iostream> #include <cstring> #include <cs…
给定\(n\)个点,\(m\)条边的带权无向图 选出一些边,使得\(4\)对点之间可达,询问权值最小为多少 \(n \leqslant 30, m \leqslant 1000\) 首先看数据范围,\(4\)对点,也就是\(8\)个点,很小 上斯坦纳树(局部最小生成树) 然而好像题目并不是斯坦纳树,可能是一些树拼到一起 那么就再做一个状压\(dp\)即可 复杂度\(O(3^8 * n + 2^8 * nm + 2^{12} * n)\) #include <map> #include <…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4006 用斯坦纳树求出所有关键点的各种连通情况的代价,把这个作为状压(压的是集合选择情况)的初值DP即可. 代码如下: #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<queue> #define pb push_back usi…
Count Color Time Limit: 1000MS Memory Limit: 65536K Description Chosen Problem Solving and Program design as an optional course, you are required to solve all kinds of problems. Here, we get a new problem. There is a very long board with length L cen…
题目: lyk有一棵树,它想给这棵树重标号. 重标号后,这棵树的所有叶子节点的值为它到根的路径上的编号最小的点的编号. 这棵树的烦恼值为所有叶子节点的值的乘积. lyk想让这棵树的烦恼值最大,你只需输出最大烦恼值对1e9+7取模后的值就可以了. 注意一开始1号节点为根,重标号后这个节点仍然为根.   update:数据保证叶子节点个数<=20.   例如样例中,将1,2,3,4,5重标号为4,3,1,5,2,此时原来编号为4,5的两个叶子节点的值为3与1,这棵树的烦恼值为3.不存在其它更优解.…
题意:给你n个数,有对区间的加减操作,问某个区间的和是多少. 思路:状压+线段树(要用lazy标记,否则会TLE) //By SiriusRen #include <cstdio> #include <cstring> #define N 100001 using namespace std; long long tree[N*4],lazy[N*4]; int xx,yy,zz,n,q; char jy; void push_down(int pos,int num){ lazy…