图论
河渔船
成长的小垃圾
展开
-
例4.15 奖金(拓扑排序)
#include<iostream>#include<cstdio>#include<cstring>#include<string> #include<algorithm>int n,m;int f[10001];int tree[10001][301];int r[10001],ans=0;using namespace std;int main(){ scanf(原创 2017-02-09 16:07:44 · 598 阅读 · 0 评论 -
蝉(90分的暴力)
n个点的树,m次操作 给出一棵树,维护下列操作: 1.在x位置放上一只蝉。(如果已经有蝉,忽略此操作) 2.查询x位置的坏掉指数(坏掉指数是指距x位置最近的蝉的距离) 一开始时在1的位置有一只蝉。 10% N,M ≤ 10 40% N,M ≤ 100 100% N ≤ 2 × 10^5 ,M ≤ 10^5那我们用暴力来做好了,每次放入蝉时,更新一下每个蝉的坏掉指数,用bfs或者原创 2017-07-25 11:11:13 · 224 阅读 · 0 评论 -
bzoj 1821 部落划分
评测:http://www.lydsy.com/JudgeOnline/problem.php?id=1821 分析一下题目: 因为最后答案是距离最近的部落的距离最远,即尽量把短的边合并进部落中。 一开始可以看做n个部落,将边排一遍序,用克鲁斯卡尔从最小的边开始将两端的点合并(如果不在一个集合中),每合并一次,集合数目就 -1,直到剩下k个部落,那么下一条两端没有在一个集合中的边就是要求的原创 2017-07-25 15:31:04 · 334 阅读 · 0 评论 -
口袋的天空
https://www.luogu.org/problem/show?pid=1195 克鲁斯卡尔最小生成树。#include<iostream>#include<cstring>#include<cstdio>#include<string>#include<algorithm>#include<queue>#include<vector>using namespace std原创 2017-07-25 16:14:29 · 606 阅读 · 0 评论 -
堡垒(fortress)
大暴力搜索题。 建图时,我的建图方法是偶数行偶数列为房子,奇数行奇数列是实墙(其实这些点是不再存在的)。 其他先赋值为没有墙,在根据输入来添墙。 看图更直观一点 样例图: 这样用bfs染色,就能做出前两问。 后两问,枚举每一面墙,如果墙两侧的房间不在一个大房间里,就可以合并,这样不断枚举更新答案。 还有难点是构图。#include<iostream>#include<cstrin原创 2017-07-26 14:43:20 · 299 阅读 · 0 评论 -
戏game
按照正解的做法,我只得了80。首先我们要明确这是一张竞赛图。 然后有一个点,在竞赛涂上如果存在环,那么就一定有三元的环。解释如下解释如下 观察一下图,看一下代码。嘻嘻 shipinjiangjie#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<vector>#include<alg原创 2017-08-17 20:51:33 · 237 阅读 · 0 评论 -
摄像头
https://www.luogu.org/problem/show?pid=2712 拓扑排序嘛。每次找入度为零即没有被观测的摄像头砸掉,再把它所观测的摄像头的入度-1. 不过此题有一个特别坑的地方,就是摄像头的编号并不是1~n。#include<iostream>#include<cstring>#include<string>#include<algorithm>#includ原创 2017-07-27 16:07:52 · 253 阅读 · 0 评论 -
传球接力
50%的做法:枚举每一个点,一直走到尽头,记录长度,更新答案。像这样的有n条边,n个点,每个点都有一条出边的点一定存在环。这样的图叫做 环加外向树。那么对于这道题的满分做法,先求出每颗树的叶子到树根的最长路径记为f[i],再找出环,然后每次枚举环上的点x,(环的长度len),用len-d[x]+f[to[x]]来更新答案就可以了。 求环的时候,有很多种方法,然而用dfs是超时的。 我们可以先求f原创 2017-08-20 15:21:44 · 544 阅读 · 0 评论 -
P1821 [USACO07FEB]银牛派对Silver Cow Party
https://www.luogu.org/problem/show?pid=1821大体描述一下题意:一张图,边为有向边,给出一个点 s,求其它点最大的从 x 到 s 和从 s 到 x 的最短路之和。机智的做法:我们可以跑两遍spfa,先跑出 s 到其它点的最短路,在将所有边反过来,再对 s 跑一边spfa, 那么第二遍求的就是其它点到 s 的最短路径。 是不是很机智呢 QAQ#include原创 2017-08-05 20:48:06 · 544 阅读 · 0 评论 -
烦人的幻灯片
Page 527#include<iostream>#include<cstdio>#include<cstring>#include<string> #include<algorithm>using namespace std;int n;struct H{ int x1,x2,y1,y2;}card[30];struct K{ int x,y;}f[30];原创 2017-02-10 08:21:09 · 1346 阅读 · 0 评论 -
聚会
把直接认识的人小于d的人删去,然后染色,找最大值就可以了。 一开始删点时,将已经删过的点的临接点的du多次重复地减,导致出错。#include<iostream>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<cstdio>#define N 200009using namespa原创 2017-09-06 17:24:14 · 211 阅读 · 0 评论 -
美妙仙人掌 cactus
Time Limit:1000ms Memory Limit:64MB题目描述 LYK在冲刺清华集训(THUSC)!于是它开始研究仙人掌,它想来和你一起分享它最近研究的结果。 如果在一个无向连通图中任意一条边至多属于一个简单环(简单环的定义为每个点至多经过一次),且不存在自环,我们称这个图为仙人掌。 LYK觉得仙人掌还是太简单了,于是它定义了属于自己的仙人掌。 定义一张图为美妙的仙人原创 2017-10-07 18:03:07 · 288 阅读 · 0 评论 -
NOIP 2014 寻找道路
评测传送先反向跑一边bfs,然后将到达不了的点以及它的邻接点删掉。(注意只删一层) 然后再正向跑一遍bfs就可以了。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<ctime>#include<queue>using namespace std;const int N=100原创 2017-10-18 17:06:26 · 326 阅读 · 0 评论 -
Codevs 1391 伊吹萃香/虫洞
Codevs 传送门 解法:因为这道题中颜色在一直变化,所以要用到一个分层图的做法。 因为颜色来回变,所以我们用0 , 1 来表示当前的时间。当时间是0时,所有点的颜色与起初一样;当时间为1 时,所有点的颜色就与起始时相反了。 用spfa来跑最短路时,交叉松弛, 我们用dis[ ][0] 来松弛dis[ ][1] , 用dis[ ][1]来松弛dis[ ][0] 。 具体处理方法在代码的注原创 2017-08-09 11:04:32 · 385 阅读 · 0 评论 -
二分图最大匹配
#include<iostream>#include<cstring>#include<cstdio>#include<string>#include<algorithm>#include<queue>#include<vector>using namespace std;int n,m;int num[20009],nxt[20009],head[10009],cnt=0,sum原创 2017-04-16 08:20:16 · 301 阅读 · 0 评论 -
割边
#include<iostream>#include<cstring>#include<cstdio>#include<string>#include<algorithm>#include<queue>#include<vector>using namespace std;int num[200009],dfn[100009],nxt[200009],low[100009],head原创 2017-04-16 08:18:44 · 481 阅读 · 0 评论 -
P1546 最短网络(最小生成树)
题见洛谷最小生成树prim#include<iostream>#include<cstdio>#include<cstring>#include<string> #include<algorithm>using namespace std;int tu[101][101],dis[101],a[101];int main(){ //freopen("a.in","r",std原创 2017-02-10 11:37:06 · 274 阅读 · 0 评论 -
P1330 封锁阳光大学
luogu坑: 图可能分为多个连通块,对于每个连通块都要找染色个数较小的那种颜色,sum进ans#include<iostream>//对于每一块连通分量都应该能够分为二分图 才能够封锁全部的道路,否则Impossible #include<cstring>#include<string>#include<algorithm>#include<queue>#include<vector>原创 2017-03-03 15:53:47 · 395 阅读 · 0 评论 -
P2731 骑马修栅栏
洛谷课本Page 466定理1:存在欧拉路的条件,图是连通的,有且只有 2 个奇点; 定理2:存在欧拉回路的条件,图是连通的,有 0 个奇点;#include<iostream>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<queue>#include<vector>#inclu原创 2017-03-03 17:21:48 · 343 阅读 · 0 评论 -
P1339 热浪
https://www.luogu.org/problem/show?pid=1339Dijkstra最短路#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<queue>#include<vector>#include<algorithm>using namespace std;in原创 2017-03-17 17:22:02 · 484 阅读 · 0 评论 -
P1576 最小花费
luogu 1576错误: 第31行 maxd 类型为double,赋成int!解法: 把消耗转化为剩余 , 运用最短路算法dijstra来找一遍最长路#include<iostream>#include<cstring>#include<string>#include<algorithm>#include<queue>#include<vector>#include<cstdio>原创 2017-03-08 15:01:15 · 994 阅读 · 0 评论 -
P1265 公路修建
洛谷 1265#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<vector>#define pow1(x) (x)*(x)using namespace std;int n;double zx[5009],zy原创 2017-03-08 15:31:03 · 524 阅读 · 0 评论 -
P1522 牛的旅行
洛谷此题。 调了2+小时。。 终其原因: 1、pow1(x) (x)*(x) ! 2、memset(127) 可能比 1e10 小 exin 至极 , 铭记!#include<iostream>#include<cstring>#include<string>#include<algorithm>#include<queue>#include<vector>#include原创 2017-03-05 10:31:32 · 718 阅读 · 0 评论 -
P1396 营救
luogu 解法:Kruskal最小生成树; 在构建最小生成树时,如果 s 与 t 在一个集合里时,当前边就是答案(因为便是按照升序排的)#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<vec原创 2017-03-08 18:34:29 · 549 阅读 · 0 评论 -
P3388 【模板】割点
https://www.luogu.org/problem/show?pid=3388#sub#include<iostream>#include<cstring>#include<cstdio>#include<string>#include<algorithm>#include<queue>#include<vector>using namespace std;int dfn[1原创 2017-03-19 10:05:42 · 346 阅读 · 0 评论 -
P2341 受欢迎的牛
luogu ——————思路和爱在心中差不多 爱在心中#include<iostream>#include<cstdio>#include<cstring>#include<string> #include<algorithm>#include<queue>#include<vector>using namespace std;int num[50009],he原创 2017-03-10 14:17:41 · 584 阅读 · 0 评论 -
P1726 上白泽慧音
luogu——————解法: 一个绝对连通区域就是一个强连通分量 因为题目要求输出最大强连通分量的规模,所以不需要考虑重边的问题(即会出现大包小的情况),如果要输出教学区的个数,则需要减去此种情况#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<ve原创 2017-03-10 14:26:53 · 311 阅读 · 0 评论 -
割点(模板)
#include<iostream>#include<cstring>#include<cstdio>#include<string>#include<algorithm>#include<queue>#include<vector>using namespace std;int dfn[1001],low[1001],dfs_num=0,n,m,cnt=0,root;int nu原创 2017-03-19 09:58:11 · 301 阅读 · 0 评论 -
P1078 文化之旅
题目链接搜索过的。 不过中间加上一个类似spfa里面的松弛优化。 数据好像比较水。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int M=107*107;int n,m,s,t,k;int b[109][原创 2017-11-08 09:13:51 · 333 阅读 · 0 评论