Codeforces 981H:K Paths】的更多相关文章

传送门 考虑枚举一条路径 \(u,v\),求出所有边经过它的答案 只需要求出 \(u\) 的子树内选出 \(k\) 个可以重复的点,使得它们到 \(u\) 的路径不相交 不难发现,就是从 \(u\) 的儿子的子树内各自选一个以及可以选多次 \(u\) 自己 设这个方案数为 \(f_u\) 再设 \(size_u\) 表示 \(u\) 的子树大小,\(son_u\) 表示 \(u\) 的儿子集合 考虑生成函数,设 \[A(x)=\prod_{v\in son_u}(1+size_vx)\] 那么…
Abstract 本文提出一种寻找K最优路径的方法. k最优路径的定义:1.the sum of the metrics of all k paths in the set is minimized. 2.no two paths pass through a common state. 适用条件:Mi ≥ k (i = 0,1,2,......,N),Mi是第i层的state的数量:includes measurement errors and false alarm, but does no…
[codeforces 293]B. Distinct Paths 试题描述 You have a rectangular n × m-cell board. Some cells are already painted some of k colors. You need to paint each uncolored cell one of the k colors so that any path from the upper left square to the lower right…
CF981H K Paths 题解 一道不错的分治ntt题目 题目稍微转化一下,就是所有k条链的存在交,并且交的部分都被覆盖k次 所以一定是两个点,之间路径选择k次,然后端点两开花 f[x]表示x子树内往下延伸k条链(可以停在x)的方案数(有标号) 每个子树选择一个或者不选择,最多一共选择k个,dp是O(n^2)的, 考虑生成函数,其实就是: 而 统计答案? 直接两两点对f相乘肯定不行,因为f仅仅是子树 考虑枚举x作为lca统计 如果是拐弯的链,树形DP即可. 而如果是直上直下的链, 对于不同子…
题目: k数和 II 给定n个不同的正整数,整数k(1<= k <= n)以及一个目标数字. 在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案. 样例 给出,返回 [[1,4],[2,3]] 解题: 题目中限制的条件很多,A数组中的各个数字都不相等,A中k个数的和是 target 问题: 1.在所有的组合方式中,A[i] 是否会重复,也就是说,A[i] ,即在{a,b,A[i]} 也在{a1,b1,A[i]}中. 可能:如A = {1,2,3,4,5} 3个…
基于有代表性的点的技术:K中心聚类法 基于有代表性的点的技术:K中心聚类法 算法步骤 随机选择k个点作为"中心点" 计算剩余的点到这个k中心点的距离,每个点被分配到最近的中心点组成聚簇 随机选择一个非中心点,用它代替某个现有的中心点,计算这个代换的总代价S 如果S<0,则用代替,形成新的k个中心点集合 重复2,直至中心点集合不发生变化 K中心法的实现:PAM PAM使用离差平方和来计算成本S(类似于ward距离的计算) R语言的cluster包实现了PAM K中心法的优点:对于&…
一.什么是K近邻? K近邻是一种基本的分类和回归方法. 在分类时,对新的实例,根据其K个最近邻的训练实例的类别,通过多数表决权等方式预测其类别. 通俗的讲,找K个和其关系最近的邻居,哪个类别的邻居多,就把它划分到哪一类 特性: (1)多分类 (2)判别模型 (3)三个基本要素:K值选择.距离度量.分类决策规则 (4)K=1时,称为最近邻算法 二.K近邻模型 1.模型:K近邻法的模型对应特征空间的一个划分,每一个划分对应一个类别 2.距离度量: (1)通常使用欧氏距离 (2)更一般的Lp距离 3.…
SPSS聚类分析:K均值聚类分析 一.概念:(分析-分类-K均值聚类) 1.此过程使用可以处理大量个案的算法,根据选定的特征尝试对相对均一的个案组进行标识.不过,该算法要求您指定聚类的个数.如果知道,您可以指定初始聚类中心.您可以选择对个案分类的两种方法之一,要么迭代地更新聚类中心,要么只进行分类.可以保存聚类成员.距离信息和最终聚类中心.还可以选择指定一个变量,使用该变量的值来标记个案输出.您还可以请求分析方差F统计量. 二.聚类中心(分析-分类-K均值聚类) 为获得最佳有效性,可取一个个案样…
题意:给定N个K维的点,Q次操作,或者修改点的坐标:或者问[L,R]这些点中最远的点. 思路:因为最后一定可以表示维+/-(x1-x2)+/-(y1-y2)+/-(z1-z2)..... 所以我们可以保存到线段树里,每次求区间最大值和最小值即可. 注意到我们可以先确定一个点的正负号,所以时间和空间节省了一半. #include<bits/stdc++.h> #define mp make_pair #define pii pair<int,int> #define F first…
题目链接 题意 给出一个m*m的地图,上面有n个点,现在需要用一个自定义面积的矩形笼罩住恰好n/2个点,并且这个矩形需要有一个点在至少一个角落上,问这个矩形最小的面积是多少. 思路 有点类似于扫描线.将y坐标离散化,沿着x轴扫过去,边加点边查找,注意这里一定要每次加一列(即x相同的时候要全加进去,不然找第k大的时候可能出错),每次查找的时候就找恰好第n/2大的y坐标,然后就可以得到面积了. 考虑到四个角都需要判定,一开始我写了四个又长又臭的函数,后来队友写了一个挺妙的Rotate()函数. #i…
http://codeforces.com/problemset/problem/731/C 题意:有n只袜子,m天,k个颜色,每个袜子有一个颜色,再给出m天,每天有两只袜子,每只袜子可能不同颜色,问要让每天的袜子是相同颜色的,要重新染色的袜子数最少是多少. 思路:并查集合并,将同一天的袜子合并起来,然后就形成了cnt个集合,每个集合都是独立的,因此排序,找出每个集合里面袜子颜色相同的最多的是哪个颜色,然后把其他不属于这个颜色的都染成这个颜色,那么这样重新染色的袜子数是最少的.然后每个集合的答案…
http://codeforces.com/problemset/problem/747/D 题意:有n天,k次使用冬天轮胎的机会,无限次使用夏天轮胎的机会,如果t<=0必须使用冬轮,其他随意.问最少的换胎次数. 思路:先数冬天的天数tol,如果天数>k的话,那么就不可能度过.否则,最坏情况下,每到冬天就换一次冬天轮胎,然后度过冬天就换夏天轮胎,所以答案是2*tol.然后考虑尽量让每段冬天连续,这样可以减少换胎次数,于是算出冬天之间的间隔,然后从小到大排序,每次减少一段间隔,ans就可-2.然…
http://codeforces.com/problemset/problem/747/C 题意:有n台机器,q个操作.每次操作从ti时间开始,需要ki台机器,花费di的时间.每次选择机器从小到大开始,如果可以完成任务,那么输出id总和,否则输出-1. 思路:简单的模拟,注意如果不能完成任务,那么ser数组是不能更新的. #include <cstdio> #include <algorithm> #include <iostream> #include <cs…
http://codeforces.com/contest/749/problem/D 题意:有几个人在拍卖场竞价,一共有n次喊价,有q个询问,每一个询问有一个num,接下来num个人从这次拍卖中除去,问对于每一个询问减掉num个人后是谁赢了拍卖,最小的价格是多少. 思路:昨晚不会做.想法好神奇(我太弱).对于每个人用 set-S 装起来其每次喊价的下标,然后用一个数组order按价格从大到小的顺序将每个人装起来,对于每一个询问,把这num个人丢到一个 set-s 里面,然后在order里面找没…
K. Perpetuum Mobile Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/K Description The world famous scientist Innokentiy almost finished the creation of perpetuum mobile. Its main part is the energy generator which…
http://codeforces.com/contest/746/problem/D 题意:有n杯茶,a杯绿茶,b杯红茶,问怎么摆放才可以让不超过k杯茶连续摆放,如果不能就输出NO. 思路:首先,设x = min(a,b),y = max(a,b),然后如果(y + x)/(x + 1) > k,那么就输出NO.即把 y 平均分成 x + 1 份,向上取整.然后开始搞... 搞的时候我直接对于 y 每一次都输出最大的份数了,导致后面的 x 过多,还自以为是平均的. 所以应该处理一下,如果有剩余…
http://codeforces.com/problemset/problem/744/A 题意:在一个图里面有n个点m条边,还有k个点是受限制的,即不能从一个受限制的点走到另外一个受限制的点(有路径相连),问在这样的图里面遵守这样的规则可以最多添加几条边. 思路:这种题之前在做强连通的时候很常见,于是就写了tarjan..醒来后发现不用这么复杂,直接用并查集就可以做了. 1.对于每一个连通块,最多可以加上n*(n-1)/2条边. 2.对于受限制的连通块,取出一个点数最多的,和不受限制的块相连…
http://codeforces.com/problemset/problem/735/D 题意:给出一个n,这个n可以分解成 n = n1 + n2 + -- + nk,其中k可以取任意数.要使得分解以后所有的n的最大因子(不包括自己本身)的和最小,问最小的和是多少. 思路:比赛的时候想到全部拆成素数是最好的,但是不知道怎么拆,看别人跑的特别快,就知道是数论题,绝望之下试了两发暴力,都是TLE了,GG.早上起来才知道有"哥德巴赫猜想"这个东西. 内容大概是如下两点: 1.所有大于2…
http://codeforces.com/problemset/problem/733/C 题意:给出一个序列的怪兽体积 ai,怪兽只能吃相邻的怪兽,并且只有体积严格大于相邻的怪兽才能吃,吃完之后,这只怪兽的体积会变成原体积 + 吃的怪兽的体积,接下来给出 k 个怪兽的体积 bi,问能不能满足经过一系列操作后让剩下的怪兽体积变得满足下面的序列. 思路:昨晚想的时候觉得好复杂,今天补题发现实际上只有一种情况,就是每一个区间里的怪兽体积对应于一个 bi,然后拆成 k 个区间,分别找区间里面最大的去…
题目链接 输入t对数 a, b 求(b,a]内的每个数拆成素因子的个数和 这里每个数都可以写成素数的乘积,可以写成几个素数的和就有几个素因子,这里求的是(b,a]内的素因子和 思路: 素数的素因子个数是1 对于非素数A的素因子个数 = A/k  + 1 其中k是素数,也是第一个素数,或者K是比A小的数,并且A%k==0 下面是利用K是比A小的数,并且A%k==0 void solve(){ Scanner sc = new Scanner(System.in); int t = sc.nextI…
题目链接:http://codeforces.com/gym/100971/problem/K K. Palindromization time limit per test 2.0 s memory limit per test 256 MB input standard input output standard output Mihahim has a string s. He wants to delete exactly one character from it so that th…
题目链接http://codeforces.com/contest/106/problem/A 题意:一套牌有S.H.D.C四种花色,按等级分成6.7.8.9.T.J.Q.K.A.每次选出一个花色作为无敌的花色(属于这个花色的牌可以打败所有不属于这个花色的牌,无视等级). 第一张牌打败第二张牌的情况有: 1.第一张牌是无敌的花色,第二张牌不是 2.第一张牌和第二张牌的花色相同,并且第一张牌的等级高于第二张牌 其余的所有情况均视为第一张牌不能打败第二张牌(包括第一张牌的花色不同于第二张牌且第一张牌…
http://codeforces.com/gym/101341/problem/K 题意:给出n个区间,每个区间有一个l, r, w,代表区间左端点右端点和区间的权值,现在可以选取一些区间,要求选择的区间不相交,问最大的权和可以是多少,如果权和相同,则选区间长度最短的.要要求输出区间个数和选了哪些区间. 思路:把区间按照右端点排序后,就可以维护从左往右,到p[i].r这个点的时候,已经选择的最大权和是多少,最小长度是多少,区间个数是多少. 因为可以二分找右端点小于等于当前区间的左端点的某个区间…
http://codeforces.com/gym/101097/attachments 题意:现在有k种颜色的木棍,每种颜色有ni根木棍,每根木棍有一个长度,问是否有三根木棍可以组成三角形,并且这三根木棍的颜色都不相同. 思路:忘了并不能直接枚举第i根,然后找i-1和i-2根,因为还有很多情况没考虑到. 可以用三个变量,分别存储当前最大的三种颜色的最大值,然后根据新进来的颜色进行判定,进行更新. #include <bits/stdc++.h> using namespace std; ty…
http://codeforces.com/gym/100502/attachments 题意:有n个点,容量为tol,接下来n个关系,表示选了第i个点,那么第xi个点就必须被选.问最多可以选多少个点使得不超过容量tol. 思路:由题目样例可得,边可能出现自环的情况,这个时候这条边其实没用.然后因为是一个图,所以需要缩点,缩完之后用一个sz数组表示点的大小,重新建一幅图.因为有可能是森林,所以需要添加一个虚根,使得其变成一棵树.然后题目就转变为求有依赖的树上背包了. 我是学了这篇博客的写法:ht…
http://codeforces.com/gym/100502/attachments 题意:有n个地点,m条边,每条边有一个边权,0代表两个顶点都染成白色,2代表两个顶点都染成黑色,1代表两个顶点可能尚未染色,但是之后必须一个染成白色一个染成黑色.问是否有可能让这个图成功染色,如果可能输出染成黑色的最少顶点数. 思路:一开始0和2的边是确定的,直接染,如果有矛盾直接false.然后利用边权为1的边建图.先考虑如果图中的某个点已经染色了,那么直接DFS染色,然后这个阶段出现黑色的点是确定的(因…
http://codeforces.com/gym/100502/attachments 题意:有两个时钟上面有n个指针,给出的数字代表指针的角度.问能否在某一时刻使得两个时钟的指针重合. 思路:容易想到先对指针角度排序,然后相邻指针相减得到一个间距.如果这些间距能够相同的话,那么就代表可以在某个时刻重合. 最暴力地做法就是O(n^2)的复杂度.用第一个时钟的每一个间距去匹配第二个时钟的每一个间距,如果发现有能够匹配到的就说明可以. 明明都想到匹配了,但是我以为可以贪心地做,但是一直WA.比赛之…
http://codeforces.com/problemset/problem/777/D 题意:给出n道字符串,删除最少的字符使得s[i] <= s[i+1]. 思路:感觉比C水好多啊,大概是题目比较难看懂吧.直接从后面往前扫,用后面的答案更新前面的答案.考虑如果后面的字符串比前面的大,那么直接保存当前的字符串,否则暴力扫一遍,前面的字符串大于后面的字符串的那一位直接跳出. #include <bits/stdc++.h> using namespace std; ]; ]; int…
http://codeforces.com/problemset/problem/776/C 题意:给出一个有n个数的序列,还有一个k,问在这个序列中有多少个子序列使得sum[l, r] = k^0,1,2,3…… 思路:sum[l, r] = k ^ t, 前缀和sum[r] = sum[l-1] + k^t.即如果后面有一段序列使得sum[l,r] = k^t,那么它可以转化为前缀和相减使得这一段大小为k^t,即sum[i] = sum[j] + k^t (1 <= j < i). 那么对…
http://codeforces.com/problemset/problem/776/D 题意:有n个门,m个开关,每个门有一个当前的状态(0表示关闭,1表示打开),每个开关控制k个门,但是每个门确切的受两个开关控制,如果一个开关打开,那么原来关闭的门会打开,打开的门关闭,问是否存在一个情况使得所有的门打开. 思路:类似于01染色,把开关当成点,门当前的状态当成边权建图.初始先假设一个门的状态(初始假设为0和假设为1都是一样的,举几个例子就发现了),然后因为每个门受两个开关控制,所以可以推出…