图论
细雨欣然
孤单是一个人的狂欢
展开
-
usaco 2006 nov poj3255 严格次短路
【问题描述】 贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友。贝茜很喜欢路边的风景,不想那么快地结束她的旅途,于是她每次回农场,都会选择第二短的路径,而不象我们所习惯的那样,选择最短路。 贝茜所在的乡村有R条双向道路,每条路都联结了所有的N个农场中的某两个。贝茜居住在农场1,她的朋友们居住在农场N(即贝茜每次旅行的目的地)。 贝茜选择的第二短的路径中,可以包含任何一条在原创 2016-07-18 11:19:38 · 401 阅读 · 0 评论 -
无序字母对
【问题描述】 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。【输入格式】 第一行输入一个正整数n。 以下n行每行两个字母,表示这两个字母需要相邻。【输出格式】 输出满足要求的字符串。 如果没有满足要求的字符串,请输出“No Solution”。 如果有多种方案,原创 2016-07-10 11:54:48 · 494 阅读 · 0 评论 -
poj2230 贝茜巡逻
【问题描述】 FJ有 N 个农场,他们由 M 条双向道路连接。贝茜从农场出发巡逻。每条路必须由两个方向各走一遍,最后回到农场1。题目保证有这样的路径存在。 请输出这样的路径。【输入格式】 第一行输入N和M,之后M行输入一条路径的两个端点。【输出格式】 输出经过的农场,一行一个(字典序最小的)。【输入样例】 4 5 1 2 1 4 2 3 2 4 3 4【输出样原创 2016-07-09 16:44:15 · 568 阅读 · 1 评论 -
【NOIP2010提高组】关押罪犯
以删边的方式看哪些边删掉后能成为二分图,删掉的最大边就为答案。 将所有边排序,进行二分猜答案,猜小于等于哪条边的删掉后为二分图,再进行验证。#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#incl原创 2016-07-09 12:00:00 · 531 阅读 · 0 评论 -
Uva11396 爪分解(二分图判定)
【问题描述】 给出n(n≤300)个节点的简单无向图(无自环无重边),每个点的度为3。现在你需要判断能否将它分解成若干个爪(如图所示)。在你的方案中,每条边必须恰好属于一个爪,但同一个节点可以出现在多个爪里。 【输入格式】原创 2016-07-09 11:40:54 · 304 阅读 · 0 评论 -
NOIP2010提高组 关押罪犯
以删边的方式看哪些边删掉后能成为二分图,删掉的最大边就为答案。将所有边排序,进行二分猜答案,猜小于等于哪条边的删掉后为二分图,再进行验证。#include#include#include#include#include#include#include#includeusing namespace std;const int maxn=20005;st原创 2016-07-09 11:15:15 · 675 阅读 · 0 评论 -
【训练题】二分图判定
【问题描述】 对于无向图 G=(V,E),如果可以把结点集分成不相交的部分,即 X和 Y=V-X,使得每条边的其中一个端点在 X 中,另一个在 Y 中,则称 G 为二分图(bipartite graph)。二分图的另一种等价说法是,可以把每个结点着以黑色和白色之一,使得每条边的两个端点颜色不同,所以黑白染色法这就是判定二分图的基本算法。不难发现,非连通图是原创 2016-07-09 09:19:24 · 370 阅读 · 0 评论 -
1656 猜序列
【问题描述】 对于一个序列a[1],a[2],…,a[n],我们可以计算出一个符号矩阵S,其中s[i][j]=a[i]+…+a[j]的正负号:连加和大于0则s[i][j]='+',小于0则s[i][j]='-',等于0则s[i][j]='0'。例如序列:-1,5,-4,2的矩阵如下: 根据序列A不难算出上述符号矩阵。你的任务上求解它的原创 2016-07-08 17:33:19 · 299 阅读 · 0 评论 -
NOIP2010提高组 引水入城
【问题描述】 这道题要分几个成部分看。 第一部分(30分) 一个简单的多源BFS从第一行的点出发能到达哪些最后一行的点。 第二部分 算法1:(60分) 先用多个BFS统计出第一行每个点能到达的最后一行的点,让后枚举每个点选还是不选,最后看能否选完,输出选的最小个数。 算法2:(100分)这种算法你需要发现一个隐藏道具(悄悄告诉你吧:如果能覆盖完,那么第一行每个点所能到的最后一行的点是连续的原创 2016-09-19 19:35:38 · 361 阅读 · 0 评论 -
奶牛政坛 //用倍增lca
【问题描述】 农夫约翰的奶牛住在N (2 <= N <= 200,000)片不同的草地上,标号为1到N。恰好有N-1条单位长度的双向道路,用各种各样的方法连接这些草地。而且从每片草地出发都可以抵达其他所有草地。也就是说,这些草地和道路构成了一种叫做树的图。 输入包含一个详细的草地的集合,详细说明了每个草地的父节点P_i (0 <= P_i <= N)。根节点的P_i == 0, 表示它没有原创 2016-11-16 19:43:06 · 246 阅读 · 0 评论 -
生成树的计数Matrix-Tree定理
摘要 在信息学竞赛中,有关生成树的最优化问题如最小生成树等是我们经常遇到的,而对生成树的计数及其相关问题则少有涉及。事实上,生成树的计数是十分有意义的,在许多方面都有着广泛的应用。本文从一道信息学竞赛中出现的例题谈起,首先介绍了一种指数级的动态规划算法,然后介绍了行列式的基本概念、性质,并在此基础上引入Matrix-Tree定理,同时通过与一道数学问题的对比,揭示了该定理所包含的数学思想。最后通转载 2017-03-19 15:56:58 · 350 阅读 · 0 评论 -
NOIP2015提高组 信息传递(图论)
【问题描述】 有n个同学(编号为1到n)正在玩一个信息传递的游戏。在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学。 游戏开始时,每人都只知道自己的生日。之后每一轮中,所有人会同时将自己当前所知的生日信息告诉各自的信息传递对象(注意:可能有人可以从若干人那里获取信息,但是每人只会把信息告诉一个人,即自己的信息传递对象)。当有人从别人口中得知自己的生原创 2016-07-13 11:14:26 · 2915 阅读 · 0 评论 -
noip2016提高组 换教室 (数学期望+Floyd)
终于还是面对这道题了,考试的时候没学期望,现在看来其实挺简单的。当时跑了个暴力,然后不知道加了些什么优化,居然跑了80分出来。Floyd部分就不说了,只是算一下每2个教室间的距离而已,重点在期望。期望我们设f(i,j,0)为前i个教室申请了j次第i个教室没申请的情况的数学期望。 相对的f(i,j,1)为前i个教室申请了j次第i个教室申请了的情况的数学期望。下面就是转移了,我们可以证明到前面的情况出原创 2017-03-17 09:04:04 · 325 阅读 · 0 评论 -
NOI2005 BZOJ 1415聪聪和可可(期望+Floyd)
一道和换教室思想差不多的题(怀疑换教室就是这个改的),老样子用Floyd算出每2个点直接的距离,然后进行期望的计算(我这里用的记忆化搜索,个人爱好,比较这样代码短)。我们设f(i,j)为猫在i位置,老鼠在j位置的期望值(名字不想打了),如果他们在同一位置显然直接吃就好,期望为0.同样的如果距离小于等于2,猫可以直接跑过去,期望为1.接下来就是大于2的情况了,我们先让猫按题目描述走2步,老鼠走一步,得原创 2017-03-17 11:42:08 · 225 阅读 · 0 评论 -
欧拉路径
【问题描述】 18世纪著名的数学问题之一:在哥尼斯堡的一个公园里,有7座桥将河中两个岛及河两岸连接起来(如图a)。问是否可能从这四块陆地中任一块出发,恰好通过每座桥一次,再回到起点? 欧拉于1736年研究并解决了此问题。欧拉把每一块陆地考虑成一个点,连接两块陆地的桥以边表示,画出图b的图论模型,由此问题变成:能否从无向图的一个结点出发走出一条路径,每条边原创 2016-07-10 12:03:01 · 945 阅读 · 0 评论 -
有向图的强连通分量
【问题描述】 给出 n (编号为1..n)个顶点,m 条边的有向图,请完成下列任务: 任务1、计算并输出图的强连通分量数。 任务2、计算并输出图的最大强连通分量。 【输入格式】 第一行两个整数 n 表示有n个点。接下来的 n 行,第i+1行表示点i发出的有向边,其中第k个数表示i出发的第k条有向边的另一个顶点,0表示结束。【输出格式】 第 1 行:一个整数,表示图的强连通分原创 2016-07-10 14:39:12 · 418 阅读 · 0 评论 -
最短路径树
【问题描述】 所谓最短路径树,就是从s出发,沿着树上的边走到任意点i,那么经过的这些边的权值和就是s到i的最短路径。Dijkstra算法或SPFA算法不仅可计算从起点s到各点的最短路径长度,同时也可得到以s为根的最短路径树。方法是在进行松弛操作时,如果d[i] + c < d[j] 时,除了更新d[j]之外,还要设置fa[j]=i。这样把fa[j]看成j的父亲指针,则所有点形成了一棵树(因为每原创 2016-07-17 17:14:13 · 1541 阅读 · 0 评论 -
找工作
【问题描述】 奶牛们没钱了,正在找工作。FJ知道后,希望奶牛们四处转转,碰碰运气。而且他还加了一条要求:一头奶牛在一个城市最多只能赚D(0 < D <= 1000)美圆,然后他必须到另一个城市工作。当然,他可以在别处工作一阵后又回来再多赚D美圆。而且这样往往返返的次数没有限制。 城市间P(1<=P<=150)条单向道路连接,共有N(2<=N<=300)座城市(编号为1..N)。贝西当前在城市原创 2016-07-17 11:36:40 · 354 阅读 · 0 评论 -
消防站
【问题描述】 某城市中有一些消防队。居民抱怨说一些房子离最近的消防站很远,所以必须建一个新的消防站。你要选择这个消防站的位置,让离最缺少服务的居民区最近。 这个城市有N个路口,用1..N编号,这N个路口被M条长度不同的双向道路连接。房子和消防站的位置都在路口上。假定在每个路口至少有一栋房子,且在同一个路口可以有多个消防站。 【输入格式】 第一行包含三个整数:f,N,M,分别表示城市现有原创 2016-07-17 10:40:03 · 719 阅读 · 0 评论 -
Floyd算法 C++
【问题描述】 给出N个顶点,M条无向带权边的连通图,和Q个查询:请编程回答: 问1、两点之间的最短路径(边权和最小的路径); 问2、两点之间的所有路径中,需要经过的最小边的最大的路径(最大边最小); 问3、两点之间的所有路径中,需要经过的的最大边的最小的路径(最小边最大); 【输入格式】 第一行:N(N<=400),M(M<=10000),Q(Q<=100)查询数量。接原创 2016-07-16 11:26:49 · 435 阅读 · 0 评论 -
NOIP2013提高组 货车运输
这道题其实和邦德市一样,只是需要多判断一下是不是在同一棵树上,这里我是用vis来标记的连通分量实现的。详见http://blog.csdn.net/qq_35546274/article/details/51888979#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<vector>#i原创 2016-07-15 10:37:31 · 389 阅读 · 0 评论 -
穿越栅栏
【问题描述】 FJ搭建了一个巨大的用栅栏围成的迷宫。幸运的是,他在迷宫的边界上留出了两段栅栏作为迷宫的出口,并且从迷宫中的任意一点都能找到一条走出迷宫的路。给定迷宫的行和列数和这个迷宫,然后计算从迷宫中最“糟糕”的那一个点走出迷宫所需的最少步数。【输入格式】 第一行为正数m和n,表示迷宫的行数和列数,用空格隔开。迷宫用一个由数字组成的矩阵表示,一个数字表示迷宫的一个格子。每一个格子的数字原创 2016-07-15 09:46:05 · 256 阅读 · 0 评论 -
拦截匪徒
【问题描述】 某城市的地图是一个由N个点组成的无向图,每个点代表一个区。现在p区发生抢劫案,而警察为了截住劫匪须埋伏在一个劫匪必经区域。由于不知道劫匪会向哪个区逃窜,所以市长要求对于任意一个劫匪可能逃向的区j,找出一个可以拦截劫匪的区域k(k!=p,k!=j),即劫匪从p区逃向j区,必须经过k区。由于地区j可能为匪徒的老巢所在,所以警察希望能在路上拦截住土匪,而不是在j区抓获。【输入格式】原创 2016-07-15 09:22:05 · 277 阅读 · 0 评论 -
第一次考试 劣质的草
【问题描述】 贝茜像其它奶牛一样正在吃草,她正在思考她所在的地方。她注意到她只得到了一个平于海平面的广泛大片牧场。只有海拔1米或者更高更硬的草不那么美味。草随着海拔的增加越发难吃。 继续咀嚼,她意识到,这没有食欲的食物长成两侧的丘陵,形成了青翠美味丰富草地海洋中的一系列劣质草小岛 。贝茜穿上她的实验服,决心测定她的牧场有多少劣草小岛。她画出一张画有被分成R (1 < R <= 1,000) 行原创 2016-07-15 08:53:26 · 207 阅读 · 0 评论 -
火蔓延的迷宫
【问题描述】 你的任务是帮助Joe走出一个大火蔓延的迷宫。Joe每分钟可以走到上下左右4个方向的相邻格子之一,而所有着火的格子都会四周蔓延(即如果某个空格子与着火格子有公共边,则下一分钟这个空格子将着火)。迷宫中有一些障碍格,Joe和火都无法进入。当Joe走到一个迷宫的边界格子时,我们认为他已经出了迷宫。【输入格式】 第一行为两个整数R和C(1<=R,C<=1000)。以下R行每行有C个原创 2016-07-13 11:22:28 · 682 阅读 · 0 评论 -
《大白书》192页 uva 1329 合作网络
【问题描述】 有n个结点(编号为1..n),初始时每个结点的父亲都不存在。你的任务是执行一次I操作和E操作,格式如下: I u v:把节点u的父亲点设置为v,距离为|u-v|除以1000的余数。输入保证执行指令前u没有父亲节点。 E u:询问u 到根接点的距离(输出距离 mod 1000的结果)。【输入格式】 输入第一行为测试数据组数T。每组数据第一行为n(5<=n<=20 00原创 2016-07-13 11:09:27 · 322 阅读 · 1 评论 -
usaco contest 2008.11 gold 安慰奶牛
【问题描述】 Farmer John变得非常懒,他不想再继续维护供奶牛之间供通行的道路。道路被用来连接N个牧场,牧场被连续地编号为1到N。每一个牧场都是一个奶牛的家。FJ计划除去P条道路中尽可能多的道路,但是还要保持牧场之间 的连通性。你首先要决定那些道路是需要保留的N-1条道路。 第j条双向道路连接了牧场Sj和Ej(1 <= Sj <= N; 1 <= Ej <= N; Sj!= Ej)原创 2016-07-12 16:48:16 · 232 阅读 · 0 评论 -
C++ 邦德市
问题描述】 邦德市有N(编号为1..N)个城市,用M条双向道路连接,每条道路都有一个危险系数。你的任务是回答若干询问,每个询问包含一个起点s和一个终点t,要求找到一条s到t的路径,使得路径上所有边的最大危险系数最小。【输入格式】 第一行一个包含两个整数N和M; 接下来的M行,每行包含三个整数:x,y,d(1<=x,y<=N,0<=d<=1 000 000 000),即城市x于城市原创 2016-07-12 14:49:53 · 700 阅读 · 0 评论 -
最优生成树 并查集和贪心的运用
【问题描述】 给出N个顶点、E条边的连通无向简单图,请你完成下列任务:任务1、求边权和最小的生成树(最小生成树) 任务2、求边权和最大的生成树(最大生成树) 任务3、求最大边最小的生成树(瓶颈生成树) 任务4、求最小边最大的生成树(瓶颈生成树) 【输入格式】 第一行:两个整数N,E(N<=50000,E<=100000),分别表示有N个新岛,E对能直接用电缆连接的岛屿,其中主岛为1。原创 2016-07-12 12:12:04 · 279 阅读 · 0 评论 -
严格次小生成树 并查集和数的综合应用
【问题描述】 小C最近学了很多最小生成树的算法,Prim算法、Kurskal算法、消圈算法等等。 正当小C洋洋得意之时,小P又来泼小C冷水了。小P说,让小C求出一个无向图的次小生成树,而且这个次小生成树还得是严格次小的,也就是说:如果最小生成树选择的边集是EM,严格次小生成树选择的边集是ES,那么需要满足:(value(e)表示边e的权值) 这下小C蒙了,他原创 2016-07-12 12:08:19 · 583 阅读 · 0 评论 -
【CQ模拟赛】密码
【问题描述】 假发通过了不懈的努力,得到了将军家门锁的密码(一串小写英文字母)。但是假发被十四和猩猩他们盯上了,所以假发需要把密码传递出去。因为假发不想十四他们发现几松门前贴的小纸条就是将军家的密码,所以他加密了密码(新八:听起来有点诡异)。加密方法如下:随机地,在密码中任意位置插入随机长度的小写字符串。 不过,假发相信银桑和他那么多年小学同学,一定能猜中密码是什么的(新八:银桑什么时候成原创 2016-07-10 15:41:30 · 547 阅读 · 0 评论 -
uva1376 BZOJ1001 动物大逃亡
时间限制:5秒 内存限制:64M 【问题描述】 由于控制程序出错,动物园的笼子无缘无故被打开,所有动物展开了一次大逃亡。整个城市是一个网络,另外每个单位方格都有一条从左上到右下的对角线,其中动物园在左上角,动物们的目的地在右下角。所有道路(即网格的边和对角线)都是双向的。 每条道路上都有一个正整数权值,代表拦截着条边所需要的工作人员数,如图所示。你的任务是排尽量少的工作人员,使动物无法原创 2017-04-06 09:44:08 · 550 阅读 · 0 评论