![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图
银之夏雪
这个作者很懒,什么都没留下…
展开
-
差分约束系统
(本文假设读者已经有以下知识:最短路径的基本性质、Bellman-Ford算法。) 比如有这样一组不等式:X1 - X2 <= 0 X1 - X5 <= -1 X2 - X5 <= 1 X3 - X1 <= 5 X4 - X1 <= 4 X4 - X3 <= -1 X5 - X3 <= -3 X5 - X4 <= -3不等式组(1)全都是两个未知数的差小于等于某个常数(大于等于也可以转载 2016-06-24 19:45:59 · 255 阅读 · 0 评论 -
poj2195Going Home(费用流或KM算法)
这道题目是比较简单的模板题,我用了两种方法写了一下,需要注意的是用KM算法写的时候,因为这个算法本身求得是二分图最大权匹配,而这道题求的是最小,那么应该在加边的时候把权值乘负一#include <iostream>#include <stdio.h>#include <stdlib.h>#include<string.h>#include<algorithm>#include<math.h原创 2016-09-12 19:15:29 · 430 阅读 · 0 评论 -
hdu2544最短路(迪杰斯特拉)
这道题目就是模板题,只是想试一下这个优化过的迪杰斯特拉模板好不要用#include <iostream>#include <string.h>#include <queue>using namespace std;const int INF=0x3f3f3f3f;const int maxn=105;const int maxm=20005;struct Edge{ int原创 2016-08-10 20:54:20 · 448 阅读 · 0 评论 -
hdu4707Pet最短路(spfa)
这是一个非常睡得最短路,边都为1,其实用搜索也可以的,找距离大于d的点的个数#include <iostream>#include <queue>#include <string.h>using namespace std;const int maxn=100000+5;const int INF=0x3f3f3f3f;struct EdgeNode{ int to;原创 2016-08-10 21:00:42 · 388 阅读 · 0 评论 -
网络流24题之最小路径覆盖问题(nefu481)
【问题分析】有向无环图最小路径覆盖,可以转化成二分图最大匹配问题,从而用最大流解决。【建模方法】构造二分图,把原图每个顶点i拆分成二分图X,Y集合中的两个顶点Xi和Yi。对于原图中存在的每条边(i,j),在二分图中连接边(Xi,Yj)。然后把二分图最大匹配模型转化为网络流模型,求网络最大流。最小路径覆盖的条数,就是原图顶点数,减去二分图最大匹配数。沿着匹配边查找,就是一个路径上的点,输出所有路径即可原创 2016-09-13 15:42:15 · 1181 阅读 · 0 评论 -
hdu5855Less Time, More profit(网络流)
多校的网络流题目,当时太菜没想出来该如何建边,拖了好久才写完,哎,效率不是一般的低啊 题意:给N个工厂,修建每个工厂需要pay[i]的花费,t[i]的时间。 给M个商店,每个商店能带来pro[i]的收益,但需要特定的k个工厂为它供货。 现在给出一个L,要求给出一个方案,使修建工厂所花费的时间最小,同时满足收益大于等于L且收益尽可能大。 思路是:先把时间排个序,然后反正一共200个时间,枚举一原创 2016-09-01 22:45:44 · 341 阅读 · 0 评论 -
hdu4751Divide Groups(二分图染色判断)
这个题就是把不认识的连线,然后二分图,这里可能有与两个集合都认识的人,那我们就不必关心他,无所谓的,反正去哪边都行,但是还是得从头开始遍历,为什么会这样呢,因为可能是非连通图,但是和那些和两个集合都认识的人有关吗,答案当然是NO,那么问题到底出现在了哪里呢,比如1-2,3-4表示1和2不认识,3和4不认识,然后你从1开始遍历,发现3,4没遍历到,就是这样#include <iostream>#in原创 2016-04-22 22:03:44 · 402 阅读 · 0 评论 -
poj3164 Command Network(最小树形图模板题)
Command Network Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 12834 Accepted: 3718 Description After a long lasting war on words, a war on arms finally breaks out between原创 2016-09-16 16:21:12 · 448 阅读 · 0 评论 -
hdu5876 Sparse Graph(补图的最短路)
这道题目是补图最短路,是点(数据很大)然后把原图变成另一半,然后求源点到其他点的最短路,这道题如果硬来的话一定是超时的,这是不用想的,毕竟200000个点的话,边本来是5500条,但是要是找补图的边的话那就是20万*20万-5500,大概是这么多,这实在是太多了,肯定是不行的,所以呢暴力枚举所有点,如果与起点相连的边不在原图中,那么距离就是起点的距离+1,然后用BFS再把这些点设为起点,再枚举剩下的原创 2016-09-11 21:48:36 · 384 阅读 · 0 评论 -
网络流之方格取数问题nefu482
分析(引用 BYvoid大牛的分析): 二分图点权最大独立集,转化为最小割模型,从而用最大流解决。 建模方法: 首先把棋盘黑白染色,使相邻格子颜色不同,所有黑色格子看做二分图 X集合中顶点,白色格子看做Y集合顶点,建立附加 源 S汇T。 1、从 S向 X 集合中每个顶点连接一条容量为格子中数值的有向边。 2、从 Y集合中每个顶点向 T 连接一条容量为格子中数值的有向边。 3、相邻黑白格原创 2016-09-09 11:07:13 · 408 阅读 · 0 评论 -
hdu3440House Man差分约束系统
题意:给个n个不同的高度,一个人从最低点跳跃,每次可以跳到第一个比它高的位置,最后跳到最高点,然后每次最多可以跳的距离为D,而且在跳跃时可以在不改变给定顺序的情况下移动这些高度,使得最后起始点和终点的位置最远, 思路:自己想了一会,想的方向错了,我自己想的方法是将最小高度记为0,最大高度记为n-1,然后写查分约束方程,这了一会发现条件不足,没想法了,看了大牛们的解法发现原来以给定的顺序直接进行条件原创 2016-06-28 21:51:33 · 726 阅读 · 0 评论 -
poj3417Network(LCA+dfs)
题意:给一个树,然后又在树上加了好多的边,现在问你删除一条原先的边和新加的边的一条,有多少中方法使得树不连通思路:对于新加的一条边来说,肯定会与之前的树形成一个环,而此时环内的所有边删除并且新加的这条变也删除就会是一种方案,而这道题是将所有新边都加入后的情况,那么我们看每条边,如果没有与它形成环的情况,那么这条边删除肯定会使得图不连通,那么情况就会加M,也就是和新加的M条边任意组合都可以,对于新加的原创 2016-07-10 12:39:37 · 2073 阅读 · 0 评论 -
poj1258Agri-Net(最小生成树)
这道题目是赤裸裸的最小生成树模板题#include <iostream>#include <string.h>using namespace std;const int INF=0x3f3f3f3f;const int maxn=110;bool vis[maxn];int lowc[maxn];int prim(int cost[][maxn],int n){ int an原创 2016-06-16 14:33:55 · 556 阅读 · 0 评论 -
poj2485Highways(最小生成树)
其实我觉得这道题有点像次小生成树,用了一个max数组,最后把max数组里的最大值求出来就行了,我之前写错是因为我求的是max[0][n-1],以为这样就能把全图都包括,得到的就是最大的,然而事实却并不是这样,max[0][n-1]表示的是从0到n-1这段路径的最大边的长度,然而我们求的是最小生成树的最大边,很有可能这条边是最大的,但是它并不在0到n-1这条路径上,所以要把所有的max数组遍历一遍就o原创 2016-06-16 14:48:58 · 378 阅读 · 0 评论 -
poj1789 - Truck History (最小生成树)
题目大意:有n个型号,每个型号有7个字母代表其型号,每个型号之间的差异是他们字符串中对应字母不同的个数d[ta,tb]代表a,b之间的差异数 问1/Σ(to,td)d(to,td)最大值 解题思路:根据题意,即分母最小,这样就转换为一个典型的求最小生成树,每两个字符串找对应位置不一样的,距离为不一样的个数,然后找最小生成树就行了#include <iostream>#include <stri原创 2016-06-16 15:34:25 · 296 阅读 · 0 评论 -
poj1734Sightseeing trip(floyd求最小环)
这道题目是floyd求最小环,意思是这样的,有那么多的环,找到一个权的和最小的,然后把序号输出来,这个的话我上网上学习了用floyd求最小环,就是u到k,到v,再到u,v到u这段不经过k,那么就让这个环里k是最大的就行了,有一点是为什么�9E要先求环再求最短路呢,因为你k是最大的,u,v都不如他打,如果你先求了最短路的话,那么dis[i][j]就会已经经过k了,而我们是要比他小,所以,就是这样#incl原创 2016-06-23 11:35:47 · 453 阅读 · 0 评论 -
poj1094Sorting It All Out(拓扑排序)
这题挺奇怪的,我之前还真么做过这样的拓扑排序,之前卡了一阵子,这个题目是判断到第几个成环,到第几个正好能唯一排序,另一种就是怎么也排不了序,就是每个数据跑一遍拓扑排序就行了#include <iostream>#include <queue>#include <string.h>#include <stdio.h>using namespace std;const int maxn=30;原创 2016-06-23 16:39:02 · 383 阅读 · 0 评论 -
poj1523(割点)
这道题是求哪个点是割点,并且能把原图分成几块,add_block数组是求增加的所以还需要加1,然后就是我一直在PE,后来发现需要每输出一组后,有一个空行#include <iostream>#include <string.h>#include <stdio.h>using namespace std;const int MAXN=1005;const int MAXM=0x3f3f3f;原创 2016-05-06 14:57:01 · 755 阅读 · 0 评论 -
Gym 100703A(最小生成树)
这道题题意就是给你n个长度为m的字符串,然后每两个字符串之间的距离是对应的每位的距离的最大值,然后把这些字符串连成一棵树,问这棵树最大边的最小值,其实就是求最小生成树的最大边,代码如下#include <iostream>#include <string.h>#include <algorithm>using namespace std;const int maxn=1005;const原创 2016-09-16 16:37:34 · 282 阅读 · 0 评论 -
hdu5883The Best Path(欧拉通路&&欧拉回路)
给你一个图 每条边都只能走一次,而且必须走 每个点有个权值 最后算经过路径的点的XOR 有两种情况,第一种是欧拉回路,那么一定有起点多走了一次,然后找出最大值就可以了 第二种情况是欧拉通路,如果这个点入度是奇数,那么先把这个点进行异或运算,然后入度减掉1,然后跑所有点,如果当前这个点的入度此时除以2之后对2取余为1,那么就对这个点进行异或运算,否则的话则不用了,为什么要这样做呢,比如原创 2016-09-18 21:44:02 · 716 阅读 · 0 评论 -
hdu5294(最大流+最短路)Tricks Device
这道题刚开始想了很久,而且之前一直不明白dicnic既然已经求了阻塞流,为什么还需要反向弧呢,现在如图: 2和3是一层,4和5是一层,然后你要是走1->2->4->6的话,如果没有反向弧,你会发现最大流是2,没有增广路了,而当有了反向弧之后,你还可以走1->3->4->2->5->6,以前总听别人说有反向弧,然而一直没找到合适的例子,今天终于让我找到了,非常开心 下面说一下今天这道题,这个题原创 2016-04-08 22:04:57 · 649 阅读 · 0 评论 -
hdu5090Game with Pearls(二分图匹配)
这道题目其实应该是可以用模拟写的,但是后来发现可以用二分图来解决,就写了一发,结果一直wa了一晚上,后来发现比如说1,2,3,4,5,5,我是按值进行加边的,结果5只加了一轮边,所以匹配数无论怎么算最多也只可能是5,(本来是打算哈希一下之类的,后来发现了更好的办法),这个时候我们就不能按照权值来加边了,要用点加边,这样就能保证每个点至少加了一次#include <iostream>#include原创 2016-10-13 12:34:36 · 278 阅读 · 0 评论 -
hdu1180诡异的楼梯(bfs)
这道题的意思是哈利波特要从S走到T,中间有那种会改变方向的楼梯,经过楼梯的话一共只用一秒,但是可能会存在有特殊的楼梯会一秒改变一次方向,也就是说可能会等一秒,不会有两个楼梯连续挨着,还有很重要的一点就是,你不能再楼梯上呆一秒,所以当你找到楼梯的时候,不能把他直接压进队列,要直接对它进行处理,然后把处理过的压进队列,这点一定要切记,再者就是在遇到楼梯的时候,先用步数的奇偶来判断此时楼梯的方向,然后看此原创 2016-10-02 15:49:41 · 885 阅读 · 0 评论 -
hdu1016 Prime Ring Problem(dfs)
这个题目虽然是dfs的初级题目,但是我对dfs几乎是一窍不通,所以写这个题也挺费劲的,不过写了这个之后再写别的题目就很容易了,这题是要找素数环,一个非常基础的深搜#include <iostream>#include <string.h>using namespace std;int prime[41]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,原创 2016-10-02 15:55:58 · 232 阅读 · 0 评论 -
nefu1121第k个序列(dfs)
非常水的搜索题,我终于会那么一点点了,加油#include <iostream>#include <string.h>using namespace std;int a[1005];bool vis[1005];int n,k,sum;bool flag;void dfs(int pos){ if(flag) return; if(pos==n+1)原创 2016-10-02 16:13:42 · 244 阅读 · 0 评论 -
hdu4781Assignment For Princess2013成都现场赛
题意是:n个点m条边,一个点能到达任意一个点,有向图,没有重边和自环,每条边的权值分别是1到m,没有任何两条边的权值相同,到从一个点出发回到这个点的权值和必须是3的倍数,现需要把这个图输出来,是个构造题,这题我刚开始想的时候看的样例,发现只要是能把3的倍数单拿出来,然后外圈连对3取余1和2的数,里面是3的倍数应该就可以了,可是后来发现边的权值只能是1到m,这样的话,里面的可能3的倍数的数不够用,所以原创 2016-10-02 20:44:49 · 541 阅读 · 0 评论 -
floyd求最小环
floyd求最小环1 定义:通常来说最小环是针对有向图而言从一个点出发,经过一条简单路径回到起点成为环.图的最小环就是所有环中长度最小的.2.怎样求最小环呢?1传统的解决方法(dijkstra): 任意一个环的权值,我们都可以看成两个有边相连的结点i、j的直接距离加上i、j间不包含边(边i->j)的最短路径。求最短路径我们第一个想到的就是Dijkstra算法。而Dijkstra所求转载 2016-06-23 13:35:26 · 861 阅读 · 1 评论 -
poj1321棋盘问题(dfs)
这道题目和八皇后那种问题有点类似,dfs传的参数里面有行和到目前为止一共放了几个棋子,不过后者也可以不用传递,行是一定要传递的,通过这个来枚举列,最关键的一点是这个题目是问k个棋子的摆放方法,k不是n,那么如果当前这一行都没有满足条件的,或者在回溯过程中,这一行剩下的几列里面没有满足条件的,那么就跳出循环,递归到下一行,但是此时的棋子数量是不变的,然后这道题目差不多就是这么做的了#include <原创 2016-10-06 15:24:39 · 314 阅读 · 0 评论 -
hdu1584蜘蛛牌(dfs)
这道题刚开始一直没有读明白是什么意思,后来发现就是蜘蛛纸牌的规则嘛,然后只能从小的移向大的,如果你要移的被标记了,证明这张牌已经被移过了,你移到它的下一张就行了,其实就是一个全排列的过程,其实移动牌就只有1到2,2到3,3到4.。。。。9到10这九种,全排列只是把这九种分别放在第几步来操作而已#include <iostream>#include <algorithm>#include <str原创 2016-10-06 15:42:09 · 525 阅读 · 0 评论 -
hdu5889Barricade(最短路+网络流)
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 219 Accepted Submission(s): 57Problem Description The empire is under attack aga原创 2016-09-18 21:50:43 · 510 阅读 · 0 评论 -
hdu4807Lunch Time(费用流)
题意:在一个有向图当中,现在每一条边带有一个容量,现在有K个人在起点,需要到终点去吃饭,询问这K个人最后一个人到达食堂的最小时间是多少。 想法:联想到普通的网络流,那么我们网络流可以很轻松的求出两个点之间的最大容量是多少,但是现在的问题就是刚开始在起步的时候那么最开始的容量是不可能到达最大的,因为人还在途中,假设我们从时间角度来分析这个问题,再联想到我们网络流求法,费用流当中,求出来的就是当然费用原创 2016-09-21 15:12:08 · 395 阅读 · 0 评论 -
hdu2586(LCA)
几乎就是求距离的模板题#include <iostream>#include <string.h>#include <stdio.h>using namespace std;const int N=40005;const int M=25;int dp[N*2][M];bool vis[N];struct edge{ int u,v,w,next;} e[2*N];in原创 2016-09-19 21:22:41 · 602 阅读 · 0 评论 -
网络流24题之太空飞行计划问题(nefu476)
DescriptionW教授正在为国家航天中心计划一系列的太空飞行。每次太空飞行可进行一系列商业性实验而获取利润。现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这些实验需要使用的全部仪器的集合I={I1,I2,…In}。实验Ej需要用到的仪器是I的子集。配置仪器Ik的费用为ck美元。实验Ej的赞助商已同意为该实验结果支付pj美元。W教授的任务是找出一个有效算法,确定在一次太空飞原创 2016-09-07 10:04:10 · 336 阅读 · 0 评论 -
poj1273&&nefu473Drainage DitchesHal Burch(最大流)
这题是标准的入门模板题,不过因为点是从0开始的,而这道题目是没有0的,所以要不然就在prepare语句那里写成prepare(m+1,1,m),要不然就从0开始,把每个点减一#include<stdio.h>#include<iostream>using namespace std;const int oo=1e9;/**oo 表示无穷大*/const int mm=111111111;原创 2016-09-05 11:28:58 · 278 阅读 · 0 评论 -
nefu474The Perfect StallHal Burch(最大流)
这道题目其实用二分图是可以写的,我是想练练网络流,所以就用这个写一下有了源点和汇点,源点到左边每个的流量都是1,也就是只能通过1 次,汇点也类似,而左边的点到右的点对应的边的边容量为1,就这样,这道题成功转换为最大流问题,建图后最大流解决#include<stdio.h>#include<iostream>using namespace std;const int oo=1e9;/**oo原创 2016-09-07 10:14:03 · 315 阅读 · 0 评论 -
网络流24题之飞行员配对方案问题(nefu475)
飞行员配对方案问题 Problem:475Time Limit:1000msMemory Limit:65536KDescription 第二次世界大战时期,英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1 名是外籍飞行员。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英国飞行员很原创 2016-09-07 10:24:21 · 371 阅读 · 0 评论 -
hdu1241 Oil Deposits(dfs&&bfs)
这又是一个练习bfs和dfs的非常好的题目,找油井的个数,8个方向只要有,就算同一个,问有多少个下面是dfs的,没什么可说的#include <iostream>#include <string.h>using namespace std;char s[105][105];int n,m;int xx[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,-1},{1,1原创 2016-09-23 10:12:50 · 1434 阅读 · 0 评论 -
hdu4725The Shortest Path in Nya Graph(最短路径)
题意:每个点放在一层,然后给了n个点,相邻的两层距离是固定的t,有额外m条边,然后求1到n的最短路径,如果没有则输出-1 这道题刚开始读错了,以为是每层只有一个点,其实每层可以有多个点,其次这道题目只说了相邻的两层之间的点的距离是t,可是并没有说同一层的点之间的距离是多少,这块我就想多了,刚开始我以为同层的距离是0,只可惜这只是我的臆想,只怪想象力太丰富,哎,然后这道题目的重点就是建边了,如果只有原创 2016-10-10 10:27:24 · 3349 阅读 · 0 评论 -
hdu5521 ICPC2015沈阳现场赛(最短路)
MeetingTime Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 2092 Accepted Submission(s): 658Problem Description Bessie and her friend Elsie原创 2016-10-07 11:13:52 · 1284 阅读 · 0 评论 -
hdu5927Auxiliary Set(dfs)2016东北赛现场赛
这题当初在东北赛做现场赛的时候看题干里面有LCA,然后就一直以为是LCA,然后怎么套模板也都感觉实现不了,而且数据量还非常大,100000个点,100000条询问,不好弄,回来之后问了一下,发现是搜索,就是你先搜索一遍,求出每个点的父亲是谁,儿子有几个,和他所在的深度,为什么要求这个呢,请往下看,当你求出每个点有多少个儿子之后,每次询问的时候查这些不重要的点,看看是否有2个以上的儿子,如果是就满足,原创 2016-10-08 11:40:04 · 537 阅读 · 0 评论