题目描述 mhy12345学习了二分图匹配,二分图是一种特殊的图,其中的点可以分到两个集合中,使得相同的集合中的点两两没有连边. 图的"匹配"是指这个图的一个边集,里面的边两两不存在公共端点. 匹配的大小是指该匹配有多少条边. 二分图匹配我们可以通过匈牙利算法得以在O(VE)时间复杂度内解决. mhy12345觉得单纯的二分图匹配算法毫无难度,因此提出新的问题: 现在给你一个N个点N-1条边的连通图,希望你能够求出这个图的最大匹配以及最大匹配的数量. 两个匹配不同当且仅当存在一条边在第…
题目 mhy12345学习了二分图匹配,二分图是一种特殊的图,其中的点可以分到两个集合中,使得相同的集合中的点两两没有连边. 图的"匹配"是指这个图的一个边集,里面的边两两不存在公共端点. 匹配的大小是指该匹配有多少条边. 二分图匹配我们可以通过匈牙利算法得以在O(VE)时间复杂度内解决. mhy12345觉得单纯的二分图匹配算法毫无难度,因此提出新的问题: 现在给你一个N个点N-1条边的连通图,希望你能够求出这个图的最大匹配以及最大匹配的数量. 两个匹配不同当且仅当存在一条边在第一个…
题目描述 某日mhy12345在教同学们写helloworld,要求同学们用程序输出一个给定长度的字符串,然而发现有些人输出了一些"危险"的东西,所以mhy12345想知道对于任意长度n的小写字母字符串,不包含危险串的字符串个数 数据范围 对于10%的数据,|str|=1 对于另30%的数据,n<=5 对于另30%的数据,危险串不存在相同字符 对于100%的数据,0<=|str|<=100,0<=n<=10000 解法 动态规划. 设f[i][j]表示到第…
JZOJ [NOIP2016提高A组集训第16场11.15]兔子 题目 Description 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3条或更多的路径与它相连,其它的兔子窝只有1条或2条路径与其相连.换句话讲,这些兔子窝之前的路径构成一张N个点.M条边的无向连通图,而度数大于2的点至多有1个. 兔子们决定把其中K个兔子窝扩建成临时避难所.当危险来临时,每只兔子均会同时前往距离它最近的避难所躲避,路程中花费的时间在数值上等于经过的路径…
JZOJ [NOIP2016提高A组集训第16场11.15]SJR的直线 题目 Description Input Output Sample Input 6 0 1 0 -5 3 0 -5 -2 25 0 1 -3 0 1 -2 -4 -5 29 Sample Output 10 Data Constraint 题解 题意 给出\(n\)个条直线的解析式,问这些直线能组成多少个三角形 题解 发现直接求解不容易求 想到可以先求出最大数量再减去不合法的 最大数量\(C_n^3\),不合法的有两种…
题目描述 流行的跳棋游戏是在一个有m*n个方格的长方形棋盘上玩的.棋盘起初全部被动物或障碍物占满了.在一个方格中,'X'表示一个障碍物,一个'0'-'9'的个位数字表示一个不同种类的动物,相同的个位数字表示相同种类的动物.一对动物只有当它们属于同一种类时才可以被消去.消去之后,他们所占的方格就成为空方格,直到游戏结束.要消去一对动物的前提条件是:这对候选动物所在的方格必须相邻,或它们之间存在一条通路.棋盘上一个方格只和其上下左右的方格相邻.一条通路是由一串相邻的空方格组成.路的长度则是通路中空方…
题目 夏令营有N个人,每个人的力气为M(i).请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? 分析 如果暴力枚举每个人被分到哪个组或不分,O(2^20)显然会超时. 我们换一种思路, 每次只枚举一半, 将前后半部分分开枚举后半部分,枚举出每种的和以及有没有被选的状态. 枚举和相同的前后部分,如果这种状态没有被选过,就ans+1,然后将这种状态打个标记,这种状态就不再产生贡献. #include <cmath> #incl…
题目描述 夏令营有N个人,每个人的力气为M(i).请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? 数据范围 40%的数据满足:1<=M(i)<=1000: 对于100%的数据满足:2<=N<=20,1<=M(i)<=100000000 解法 40% 枚举每一位选或不选,设当前选的所有数的和为sum,然后使用背包求出当前每个可能的总和. 如果其中有sum/2,那么说明这种选法合法,使答案+1: 10…
题目描述 解法 搜索. 代码 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; const char* fin="mahjong.in"; const char* fout="mahjong.out"; const int inf=…
题目 YJC最近在学习图的有关知识.今天,他遇到了这么一个概念:随机游走.随机游走指每次从相邻的点中随机选一个走过去,重复这样的过程若干次.YJC很聪明,他很快就学会了怎么跑随机游走.为了检验自己是不是欧洲人,他决定选一棵树,每条边边权为1,选一对点s和t,从s开始随机游走,走到t就停下,看看要走多长时间.但是在走了10000000步之后,仍然没有走到t.YJC坚信自己是欧洲人,他认为是因为他选的s和t不好,即从s走到t的期望距离太长了.于是他提出了这么一个问题:给一棵n个点的树,问所有点对(i…