随笔分类 - VJ-给题目添标签
摘要:题意:树的最小点覆盖,选择最少的点覆盖所有边。 分析: 状态:f[u][0/1] 表示不选/选编号u的点的最优解 转移: 不选u,则一定选u的儿子v,即 f[u][0] +=f[v][1] 选u,则可以选,也可以不选u的儿子v,即 f[u][1] += min(f[v][0], f[v][1]);
阅读全文
摘要:题意:某大学有N个职员,编号为1~N。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请你编程计算,邀
阅读全文
摘要:题意:给出一棵无向树,求树的直径,即树上两点之间的最长距离 分析:两种解法 解法1:先任取一个点,找到距离该点最远的点u,再找到距离u最远的点v,那么u和v之间的路径就是一条直径。 证明:只要找到了树的直径的一个端点,再从该点找到最远点就一定是直径的另一个端点。所以只需要证明第一次找到的最远点u就是
阅读全文
摘要:题意:n个学生分属m个团体,一个学生可以属于多个团体。一个学生疑似患病则它所属的整个团体都疑似患病。已知0号学生疑似患病,以及每个团体都由哪些学生构成,求一共多少个学生疑似患病。 分析: 思路1:维护一个普通并查集,查询与0在同一集合的元素数量。 思路2:维护一个带权并查集,记录当前根节点所在集合的
阅读全文
摘要:题意:有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。 球赛的规则如下: 如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。 如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。 根据这个规则,无需循环较量,或许
阅读全文
摘要:题意:有N个比赛队(1≤N≤500),编号依次为1,2,3,...,N 进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。 符合条件的排名
阅读全文
摘要:题意:有一个旅游区,旅游区有很多的景点,景点间需要开通缆车,使得任意两个景点可以互相到达。现在给出一些点间的缆车线路制造成本,两个景点之间可能有多重制造方式。问最少的花费是多少。 分析:连通+最少的花费 = 最小生成树。 Prim算法适用于稠密图, Kruskal适用于稀疏图 好家伙,两个 runt
阅读全文
摘要:题意:房间里一共有 $10^7$个人,人与人直接有直接或者间接的朋友关系。 最多可以选择多少有朋友关系的人? 分析:求最大连通块。 带权并查集,父节点同时维护数量。 dfs/bfs 求最大连通块。 #include <bits/stdc++.h> using namespace std; typed
阅读全文
摘要:题意:存在许多点和点与点之间的路径,路径长度不一,点到点之间可能存在多条路径。挑选部分路径使得所有点连通且总路径长度最小。 分析:连通+路径长度最小 = 最小生成树。 Prim算法适用于稠密图, Kruskal适用于稀疏图 #include <algorithm> #include <cstdio>
阅读全文
摘要:题意:有n个农场,已知这n个农场都互相相通,有一定的距离,现在每个农场需要装光纤,问怎么安装光纤能将所有农场都连通起来,并且要使光纤距离最小,输出安装光纤的总距离。任意两个村庄之间的距离小于 100,000. 分析:连通+距离最小 = 最小生成树 Prim算法适用于稠密图, Kruskal适用于稀疏
阅读全文
摘要:题意:我们把一个城市考虑为一个图, 街道为边, 路口为点, 路口标记为 0~N-1. 盗贼从一个点开始逃亡, 每一分钟走一条边。不幸的是, 我们并不知道他逃往何处, 只能假设他每分钟都必须沿着一条边走, 不能停留但是可以反复经过。警官想要知道是否存在一个时刻, 盗贼可能出现在城市中的任意路口。 分析
阅读全文
摘要:题意:欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路? 分析: 欧拉路径:一条路,走完所有边,边不重复。 欧拉回路:起点就是终点的欧拉路径。 具有欧拉回路的图称为欧拉图(简称E图)。 具有欧拉路径但不具有欧拉回路的图称为半欧拉图。 无向
阅读全文
摘要:题意:第 i 个火车站都有一个数字 Ki (0≤Ki ≤N),火车在第 i 站只能前进Ki 站或后退 Ki 站。火车只能在第 1 站和第 N 站之间行驶。 请问,从第 a 站到第 b 站最少需前进或后退多少次? 分析:利用BFS,将每个站出发能到的所有站都入队,不断更新下去,直到所有站都被到达或者车
阅读全文
摘要:题意:无向连通图中,每条边距离为 1,问其中距离起点距离大于 d 的点数。 分析:由起点出发,标记每个点距离起点的距离。 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 1e5 + 1
阅读全文
摘要:题意:求某点所在连通块的大小。 分析:由某点进行dfs,每次标记该点,并计数。 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 110, INF = 0x3f3f3f3f; strin
阅读全文
摘要:题意:朋友的朋友是朋友 如果A认识B,B认识C,那么ABC三个人就可以坐在同一张桌子上 但如果A认识B,C认识D,那我们就默认AB和CD不认识,需要准备两张桌子 现在我们需要你计算出,我们一共最少需要多少张桌子。 分析:利用并查集或者作为连通块数量问题 #include<iostream> #inc
阅读全文
摘要:题意:求连通块的数量。 分析:遍历每个点,dfs处理没有标记过的连通点,每次标记完成都是一个连通块处理完成。 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 110, INF = 0x
阅读全文
摘要:题意:给定多个单词,每个单词的首字母可以到末字母,问能否由 'b' 到 'm'。 分析:将每个单词首尾字母建图,dfs('b') 将能到的所有字母进行标记,最后检查 'm' 是否被标记。 #include <bits/stdc++.h> using namespace std; typedef lo
阅读全文
摘要:题意:有向图判断是否是树。 树是一种众所周知的数据结构,它要么是空的,要么是一组由足以下条件的节点之间的定向边连接的一个或多个节点。 正好有一个节点,称为根,没有定向边指向该节点。 除了根节点外,每个节点都有一条指向它的边。 从根到每个节点都有一个唯一的有向边序列。 分析:对于一棵非空树,有如下性质
阅读全文
摘要:很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。 这让很多学生很反感。 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。 Input 本题目包含多组测试,请处理到文件结束。 在每个测试的第一行
阅读全文