随笔分类 - 树/图的遍历
摘要:注意:本题解仅供参考学习,请勿直接抄袭代码,否则造成的后果和笔者无关。 第一题: 题意: 对n个数升序排序。 题解: 快排,不解释。 代码(省略了输入输出函数,下同): 1 val n = getInt (); 2 val l = getIntTable (n); 3 fun qsort [] =
阅读全文
摘要:bzoj2208[Jsoi2010]连通数 题意: 给一个有向图,每个点对答案的贡献为该点可达的点个数,求答案。n≤2000,m≤4000000。 题解: 听说暴力可过QAQ不过为了练tanjan还是写了常规写法。 先缩点,接着对每个入度为0的点做dp,每个点维护一个bitset。对于当前点,先将该
阅读全文
摘要:bzoj1179[Apio2009]Atm 题意: 给个有向图,每个点有个点权,有些点有酒吧。现在求一个人从任意一点出发获得点权的最大和。要求每个点的点权只能获得一次,且路径最后必须在酒吧结束,可以重复经过点和边。n,m≤500000。 题解: tarjan缩点之后跑spfa,注意不能用dijkst
阅读全文
摘要:bzoj3391[Usaco2004 Dec]Tree Cutting网络破坏 题意: 给一棵树,问去掉哪个点后可以使剩下的每个子树大小都小于等于节点总数的一半。n≤10000。 题解: dfs的时候求一下子树大小,以当前节点的父节点为根节点的子树大小为n-以当前节点为根节点的子树大小。 代码: 2
阅读全文
摘要:bzoj1596[Usaco2008 Jan]电话网络 题意: 在一棵树中选最少的点建塔,使得每个点都有塔或相邻点有塔。n≤10000。 题解: 贪心。dfs时对于每个当前点,在dfs完它的所有子节点后如果它以及它的儿子以及它的父亲没塔,则在它父亲处建塔。 代码: 20161108
阅读全文
摘要:bzoj3522[Poi2014]Hotel 题意: 在一个树上求三个点两两距离相等的方案数。n≤5000。 题解: 枚举每个点作为中心点,求出每个子树的深度为i的节点大小,则目标是求某个深度的答案和。 设第i个子树在某个深度的节点数为dep[i],令a1[i]=sigma(dep[j],j<=i)
阅读全文
摘要:bzoj1124[POI2008]枪战Maf 题意: 有n个人,每个人手里有一把手枪。一开始所有人都选定一个人瞄准(有可能瞄准自己)。然后他们按某个顺序开枪,且任意时刻只有一个人开枪。因此,对于不同的开枪顺序,最后死的人也不同。求最小死人数和最大死人数。n≤1000000。 题解: 最小死人数:先找
阅读全文
摘要:bzoj3355[Usaco2004 Jan]有序奶牛 题意: 约翰的N头牛排成一行挤奶时,有确定的顺序。他拥有L条关于奶牛顺序的信息,所有的信息都写成“A在B的前面”这样的形式。请帮助约翰删除尽可能多的冗余信息,但要保证能推出原有的顺序。n≤1500。 题解: 首先拓扑排序,并给每个节点设定一个b
阅读全文
摘要:bzoj1776[Usaco2010 Hol]cowpol 奶牛政坛 题意: 给出一个树,每个节点k个政党中的一个。问每个政党间最远的两个节点距离多少。节点数≤200000。 题解: 有个结论:每个政党所求两个节点其中一个必然是这个政党中深度最大的节点。因此枚举每个节点,计算该节点与节点所属政党深度
阅读全文
摘要:bzoj1703[Usaco2007 Mar]Ranking the Cows 奶牛排名 题意: n头奶牛,知道n对奶牛之间的产奶量大小,问想知道所有奶牛产奶量大小顺序至少还需知道几对。n≤1000。 题解: 每个大小关系看为一条有向边,对每头奶牛进行dfs,求每头奶牛可以到的奶牛数和可以到它的奶牛
阅读全文
摘要:bzoj1574[Usaco2009 Jan]地震损坏Damage 题意: n点m边无向图,知道p条信息ai,表示ai没被损坏但它和点1不联通(损坏的点不能通行),问有多少点和1联通(不包括损坏的点)。n≤30000,m≤100000。 题解: 有一个结论,最优删点方案应该是对每个信息ai,将所有a
阅读全文
摘要:bzoj1589[Usaco2008 Dec]Trick or Treat on the Farm 采集糖果 题意: n个节点,每个节点有一个后继节点,问从每个节点出发能到多少个没去过的节点。n≤100000。 题解: 因为每个节点只有一个后继节点,所有tarjan缩点后就会变成一堆链,对每条链df
阅读全文
摘要:bzoj1827[Usaco2010 Mar]gather 奶牛大集会 题意: n点树(有边权),找出一个点,使得其它所有点到它的距离和最小。n≤100000。 题解: 类似bzoj1131,但维护深度和改为维护距离和。 代码: 1 #include <cstdio> 2 #include <cst
阅读全文
摘要:bzoj1131[POI2008]Sta 题意: 给出一个n个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大。n≤1000000。 题解: 两次dfs。第一次dfs维护子树的大小、节点的深度、以子树的根为根的子树深度和。第二次dfs维护以某节点为根除了以1为根时它的子树之外的所有节点
阅读全文
摘要:bzoj1627[Usaco2007 Dec]穿越泥地 题意: 网格中有一些障碍物,求从起点到终点最小步数。-500≤坐标≤500 题解: bfs。所有坐标均加上500,就可以只考虑第一象限了。 代码: 20160919
阅读全文
摘要:bzoj1611[Usaco2008 Feb]Meteor Shower流星雨 题意: 给个网格,有m个流星,每个流星在ti时刻打在(xi,yi)的格子上,并把该格子和相邻的格子打烂。有个人从(0,0)出发,问最短逃离时间(格子被打烂之后就不能走)。 题解: bfs一发,如果某格子被打烂的时间小于到
阅读全文
摘要:bzoj1603[Usaco2008 Oct]打谷机 题意: 给个树,每个边都有边权0和1。0表示两个端点同色,1表示两个端点不同色。点1为黑色,问点n哪种颜色(颜色只有两种:黑和白)。树大小≤1000。 题解: dfs一发。 代码: 20160917
阅读全文
摘要:bzoj3891[Usaco2014 Dec]Piggy Back 题意: 给定一个N个点M条边的无向图,其中Bessie在1号点,Elsie在2号点,它们的目的地为N号点。Bessie每经过一条边需要消耗B点能量,Elsie每经过一条边需要消耗E点能量。当它们相遇时,它们可以一起行走,此时它们每经
阅读全文
摘要:bzoj4395[Usaco2015 dec]Switching on the Lights 题意: n*n个房间,奶牛初始在(1,1),且只能在亮的房间里活动。每当奶牛经过一个房间,就可以打开这个房间里控制其它房间灯的开关。问奶牛最多可点亮多少个房间。n≤100。 题解: 因为只要一个房间灯亮了,
阅读全文
摘要:bzoj2753[SCOI2012]滑雪与时间胶囊 题意: n点m有权边图,每个点都有高度,只能从高度高的点到高度低的点。同时还可以瞬移到走过的点,希望求经过最多点的最短时间。n≤100000,m≤1000000。 题解: “ 第一问:用bfs扩展出能到达的所有点,并标记。第二问:分层做最小生成树。
阅读全文