洛谷题面传送门 9.13 补之前 8.23 做的题,不愧是鸽子 tzc( 首先我们先来探讨一下如果 \(c_{i,j}\le k\) 怎么做,先考虑第一问.显然一个连通块符合条件当且仅当它能够包含所有颜色.我们注意到这里的 \(k\) 数据范围很小,因此考虑状压 \(dp\).\(dp_{x,y,S}\) 表示包含 \((x,y)\) 且囊括了 \(S\) 中所有颜色的最小连通块的大小.那么有转移 \(dp_{x,y,S}+1\to dp_{x+1,y,S\cup\{c_{x+1,y}\}}\)…
考虑颜色比较少的时候,第一问可以直接斯坦纳树 第二问考虑二分,每次把每格的权值给成1000+[a[i]>m],就是在个数最少的基础上尽量选小于等于m的 然而颜色太多不能直接做,但可以把每种颜色映射到5以内,这样的话,做一次的正确率就是作为答案的那5种颜色分别被映射到了1~5的概率,就是$\frac{5!}{5^5}=0.0384$,做233次正确率就有$99.989\%$了 #include<bits/stdc++.h> #include<tr1/unordered_map>…
题目 题目 做法 考虑部分数据(颜色较少)的: 二分中位数\(mid\),将\(v[i]=1000+(v[i]>mid)\) 具体二分操作:然后求出包含\(K\)种颜色的联通快最小的权值和,判断该权值和是否满足中位数为\(mid\),从而调整范围 其中求权值和显然可以用斯坦纳树解决 正解: 我们每次随机把颜色映射到\([0,K)\)中去,每次得到的结果正确率就为答案联通块的离散颜色正好一一对应的概率:\(\frac{K!}{K^K}\) 随机\(233\)次,有\(99\%\)以上的正确率 Co…
题目大意 有一个网格(或者你可以认为这是一个图),每个点都有颜色 \(c_i\) 和点权 \(a_i\). 求最小的连通块,满足这个连通块内点的颜色数量 \(\geq k\).在满足点数最少的前提下,要求点权的中位数最少. \(n\leq 233,c_i\leq n,k\leq 5\) 题解 如果 \(c_i\) 很小,就可以直接用斯坦纳树做. 本题要求在满足点数最少的前提下,要求点权的中位数最少.那么可以二分中位数 \(s\),将 \(a_i\leq s\) 的点的权值设为 \(M-1\),\…
题意 题目链接 分析 对于第一问,如果颜色数量比较少的话可以 \(\binom{cnt}{k}\) 枚举最终连通块中的 \(k\) 种颜色,然后利用斯坦纳树求解. 如果颜色比较多,考虑将所有的颜色重新随机赋值 \([0,k-1]\) 然后跑斯坦纳树.貌似还可以证明:最终的连通块中一定恰好只有 \(k\) 种颜色.那么只要最终答案中那 \(k\) 种颜色随机到的是不同的颜色,就可以跑出正确答案,成功的概率是 \(\frac{k!}{k^k}\) ,而且最优解还可能不唯一,所以做 100 次失败的概…
上个月写的题qwq--突然想写篇博客 题目: 洛谷4294 分析: 斯坦纳树模板题. 简单来说,斯坦纳树问题就是给定一张有边权(或点权)的无向图,要求选若干条边使图中一些选定的点连通(可以经过其他点),且边权(或点权)之和最小.很明显,这样最终形成的是一棵树. 通常,斯坦纳树问题规模都比较小.考虑状压DP.用\(dp[u][S]\)表示让点\(u\)与集合\(S\)中所有关键点连通的最小花费.有如下两种转移: 第一,把两条到\(u\)的路径拼在一起,减去重合点\(u\)的点权,即(\(w_u\)…
传送门 感觉对斯坦纳树还是有很多疑惑啊…… 等到时候noip没有爆零的话再回来填坑好了 //minamoto #include<iostream> #include<cstdio> #include<queue> #include<cstring> using namespace std; #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?E…
题目链接 题目大意:有一张无向图,每条边有一定的花费,给出一些点集,让你从中选出一些边,用最小的花费将每个点集内的点相互连通,可以使用点集之外的点(如果需要的话). 算是斯坦纳树的入门题吧. 什么是斯坦纳树呢? 假定有这样的题目:给你一张无向图和一个点集,每条边有一定的花费,让你选出一些边使点集内的所有点连通,求最小花费. 可以发现,如果点集大小为2,那么就转化成了一个两点间最短路问题. 而如果点集大小为总点数,那么就转化成了一个最小生成树问题. 进一步可以推出,如果点集大小为3,那么答案就相当…
题目:https://loj.ac/problem/2977 想到斯坦纳树.但以为只能做 “包含一些点” 而不是 “包含一些颜色” .而且不太会处理中位数. 其实 “包含一些颜色” 用斯坦纳树做也和普通的一模一样……只是赋初值的时候,遇到该颜色的点就可以更新一下罢了…… 中位数可以二分.每个点除了 “块数” 这个关键字之外,再带一个关键字表示 “a[ ][ ]是否大于二分值” ,用 -1 表示不大于,1表示大于,然后普通地跑一个斯坦纳树,看看第二关键字那一维是否 <= 0 即可. 至于处理 “从…
题目描述 VRI(Voltron 机器人学会)的工程师建造了 n 个机器人.任意两个兼容的机 器人站在同一个格子时可以合并为一个复合机器人. 我们把机器人用 1 至 n 编号(n ≤ 9).如果两个机器人的编号是连续的,那 么它们是兼容的,可以合并成一个复合机器人.最初这 n 个机器人各自都只有唯 一的编号.而一个由两个或以上的机器人合并构成的复合机器人拥有两个编号, 分别是构成它的所有机器人中最小和最大的编号. 例如,2 号机器人只可以与 1 号或 3 号机器人合并.若 2 号机器人与 3 号…