![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
===图论===
文章平均质量分 52
Loi_LXTT
这个作者很懒,什么都没留下…
展开
-
<tarjan算法模板> codevs 1332 上白泽慧音
※题目链接:http://codevs.cn/problem/1332/ 嘛。。还是有很多细节问题需要处理的: ①对vector进行sort时,注意一下sort函数的形式:sort(vector[].begin(),vector[].end)(这里的vector是变量名) ②题目没有说从1号点出发一定可以搜到所有的点,所以要把每一个点都dfs一遍,当然要判断一下这个点之前是否访问过—–很多其他原创 2017-09-27 16:03:50 · 415 阅读 · 0 评论 -
<并查集>luogu 1197 星球大战
去题面的传送门记得之前做过一个跟这个题很类似的。那道题是每次删一条边,问联通块的个数。正解就是离线处理,然后倒序加边,用并查集维护。而这道题是删点,同样想到离线处理然后倒序加点,唯一的不同是这道题要把这个点连接的所有边都for一遍。。。 话不多说,上代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorith原创 2017-10-14 19:14:41 · 309 阅读 · 0 评论 -
codevs 2218 补丁vs错误
去题面 QAQ光读题就恶心了我好久 一开始想的是把补丁和补丁建边,然后跑spfa,存当前的状态,看下一步是否能走。但是一看,状态最多有1000000+,补丁有最多100,vis数组和dis数组一定存不下。。。 QAQ那就把状态和状态之间建边吧,枚举每一种状态和每一个补丁,如果这个状态可以通过这个补丁变为另一个状态,建一条由该状态指向改变后状态的边,权值是该补丁的使用时间,跑最短路就行了 代码原创 2017-10-23 19:36:28 · 320 阅读 · 0 评论 -
【noip 2015】信息传递
去题面的传送门 QAQ这题有两种做法Solution 1: 暴力找环很明显题目是让找最小环,那我们就顺着找呗。一开始尝试用递归做,弄了半天也不行,不太好记录已经跑过了几个点。 其实每一个点的出度都是1,所以不用存图,直接一个数组记录每一个点连接的下一个节点是哪一个就行了。 记得还要for一遍,确定每一个点都跑过。 但是一开始这样交超时了。 后来发现,其实每次从一个点开始找环的时候,如果直接原创 2017-10-21 11:26:37 · 274 阅读 · 0 评论 -
【noip 2015】运输计划
去题面的传送门 题目的意思是:求将一棵树上的任意一条边权赋值为0时,所有航线的最长长度的最小值 想到二分答案 如何验证? 既然我们二分的答案是最长路线,也就是说,在将一条边权赋值为0之后,所有的路线长度应该都小于等于mid。但是只能删掉一条边,所以这条边是所有删边之前长度小于mid的路线的交边。问题转化为,能否找到一条边,被所有长度大于mid的路线经过。所以我们要统计每一条边被经过的次数。统原创 2017-10-23 14:55:00 · 410 阅读 · 0 评论 -
<二分答案+spfa验证>codevs 1183 泥泞的道路
去题面的传送门求一条路径(s1+s2+s3+…+sn)/(t1+t2+t3+…+tn)最小 可知对于这条路径(s1+s2+s3+…+sn)/(t1+t2+t3+…+tn)=v(平均速度) 等式变形:(s1-v*t1)+(s2-v*t2)+(s3-v*t3)+…..+(sn-v*tn)=0 问题转化为:找一个最大的v使得该等式对于某一条路径成立。 将边权转化为si-v*ti,跑最长路。二分答原创 2017-10-14 10:59:31 · 294 阅读 · 0 评论 -
codevs 1961 躲避大龙
去题面的传送门有点像数字三角形取模后最大(codevs 数字三角形w)那道题。都是看到达某种状态是否存在,在终点中找答案最优的状态。 其实数字三角形那个也可以看做是一张图。1961这道题直接从起点跑一遍就行了。 注意边权如果是负的,要不断加60直到它变为正数再取模 代码:#include<iostream>#include<cstdio>#include<cstring>#includ原创 2017-10-13 17:12:48 · 240 阅读 · 0 评论 -
<二分答案加验证||最小生成树>bzoj 1821 部落划分
去题面的传送门Solution 1:二分答案加验证 并查集维护分成的部落 小于答案的边必须分到同一个并查集里,最后并查集的数目如果小于k,那么答案偏小 这里有一个问题 二分时,如果把各个点之间的距离排一遍序,二分这个数组的话,会wa 原因是,举个栗子: 比如说各点的距离里面,有一段区间是:[11.2145,12.4000],如果直接二分这个区间,在验证到答案11.2145时,发现11.2原创 2017-10-23 11:25:20 · 293 阅读 · 0 评论 -
【队内胡策 10.30】 T2
求一个被memset卡时的人的心理阴影面积 嗯。。多叉树。。考试的时候想成二叉树了 两个人肯定尽量去堵对方的路 所以他们一定会在一个点相遇 如果这个点还有其他分枝,按最优原则分配给两个人: 如果两个人走过的总边数为奇数,那么相遇后,下一个选择的人是Yjq,反之为Hja。每个人选择当前可以选择的分枝中子树权值最大的一个。所以预处理以每个点为根的子树的大小 这个题最麻烦的是分类求相遇点。。原创 2017-10-31 09:38:24 · 358 阅读 · 0 评论 -
codevs 1324 昂贵的聘礼
去题面的传送门 一道比较神奇的最短路问题 注意建边的方式: 比如要得到x,需要y和z金币,那么由y指向x的一条有向边,边权是z 但是我们的每一种物品都可以直接用金币来换,所以我们建一个超级点,连向所有的节点,边权是这个物品的金币数 当然,还要有等级的限制: 首先,我们经过的节不能有高于酋长等级的,其次,与酋长的等级差不能超过m 但是我们并不知道酋长的等级是什么,所以我们还要枚举等级原创 2017-09-30 23:11:32 · 194 阅读 · 0 评论 -
<差分约束>luogu 3275 糖果
去题面的传送门 对于题目中的各种条件: ① a=b 建边a–>b=0,b–>a=0 ②a>=b 建边 b–>a=0 ③a>b 建边b–>a=1 为什么呢? 因为要求最少糖果数,那么对于a=b和a>=b的情况,就都让它们相差的最少,就是0,对于a>b,差的最少就是1,所以建边为1. 然后跑最长路。因为对于一个学生的糖果数量,要尽可能满足所有人的要求。如果存在最长路,那么该同学的糖果数就原创 2017-10-30 07:04:00 · 310 阅读 · 0 评论 -
<tarjan||拓扑>codevs 2066 三角恋
去题面的传送门 第一次做超时了,只得了四十分。 做法是dfs找大小为3的环。数据范围是2000,一定超时。 下面是40分的代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=2000+10;int cnt,t,n;int原创 2017-10-28 16:14:34 · 339 阅读 · 0 评论 -
codevs 1391 伊吹萃香
去题面的传送门QAQ第一反应是dij,把走过的时间和耗费的体力放在结构体里。。但是死活TLE并且MLE好吧,去翻正解,是spfa哇哇,我IE什么我的脑回路就是和正解对不上。。其实可以不用记录走过的时间,记录奇数偶数,用0和1表示偶数和奇数很关键的一点,0和1的转化可以用异或来解决,QAQsummer说加一取模也可以,但是慢每次还要分直接走过还是先停一秒再走,是两种状态,所以dis和vis都开二维,第原创 2017-10-19 20:48:20 · 417 阅读 · 0 评论 -
【noip 2010】关押罪犯
去题面的传送门Solution 1:并查集QAQ之前做过并的查集做法。 按权值排序,优先把大权值的分开 对于一个节点a,a+n表示和它不在一个监狱里 代码:#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<algorithm>using namesp原创 2017-10-21 07:52:34 · 239 阅读 · 0 评论 -
2017.10.18 队内胡策 D5
昨天考的题,今天早晨才把T2调完,竟然卡了精度原题链接: T1:gjh自己出的(灵感来源:codevs 1742 爬楼梯 链接) T2:luogu 2656 采蘑菇 链接 T3:codevs 1456 隐藏口令 链接 T4:luogu 1984 烧水问题 链接T1 第一问DP,第二问随便打打贪心 结果我第二问贪心在模拟的过程中就打次了(第一次贪心模拟输给了DP)不多说 很简单 代码:原创 2017-10-19 10:28:55 · 325 阅读 · 0 评论 -
<二分图染色>codevs 1535 封锁阳光大学
*题目链接:http://codevs.cn/problem/1535/ 二分图染色统计最小答案: 注意几个问题: ※※①要从每一个点都搜一遍啊,图不一定是联通的而且一号节点不一定与其他节点都联通啊,已经栽在这上面两次了,还要注意每次都取各个联通块的最小值,这样最后的答案加起来才是最小值 ②数组不要开小了,一开始maxn赋的10000,结果有一个点TLE,而且我只跑了22ms,(日常吐槽co原创 2017-09-29 15:24:40 · 229 阅读 · 0 评论 -
<tarjan算法练习-缩点>codevs 2822 爱在心中
※题目链接:http://codevs.cn/problem/2822/ *题目大意:求一个有向图中节点个数不为一的SCC的个数,并且输出一个SCC中包含的节点(由小到大输出),要求这个SCC含有一个以上的节点并且其他所有的SCC都指向它 *首先用tarjan缩点,然后统计一下每一个SCC含的节点数,并记录,这个很好统计 *对于找被所有其他SCC指向的SCC: ①可以暴力求解,即从每一个SC原创 2017-09-27 21:13:42 · 287 阅读 · 0 评论 -
<倍增lca>codevs 3305 水果姐逛水果街Ⅱ
题目链接:http://codevs.cn/problem/3305/ –要先求两点的lca,再从x,y分别跳到lca的过程中记录答案,而不是在求lca的过程中,那样没有办法记录答案#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>using namespace std原创 2017-09-25 16:53:37 · 272 阅读 · 0 评论