hdu
文章平均质量分 73
Weiguang_123
这个作者很懒,什么都没留下…
展开
-
hdu 4005
题意:有一幅图,现在要加一条边,加边之后要你删除一条边,使图不连通,费用为边的费用,要你求的是删除的边的最小值的最大值(每次都可以删除一条边,选最小的删除,这些最小中的最大就为答案)首先要进行缩点,把图缩为一棵树,因此,加入一条边后图就会存在一个环,环中的任何一条边删除后都不会导致图不连通之后找一条最小的边,可以说这条边肯定是在加边之后的连通块里的,因为如果不在连通块里,那就直接可以把原创 2012-08-29 05:08:15 · 1345 阅读 · 0 评论 -
poj 3694&&hdu 2460 (手写递归栈版的tarjan)
题意:求加入一条边后剩余的桥。题解:加入的边形成的环里的桥都不存在了。#pragma comment(linker, "/STACK:10240000000000,10240000000000")#include #include #include #include #include using namespace std;const int maxn=110009;con原创 2012-09-17 13:34:08 · 1339 阅读 · 3 评论 -
hdu 4125(手写递归 栈 )
(AC仅限于hdu,跑了3900+ms,险过。不过在poj上TLE,因为poj上的时间是3000ms)解题思路:对于此题首先将所给的数字构造一棵平衡二叉树,不过不能用纯模拟去构造这棵树,因为所给的数字构成的树可能就是一条链状!若用纯模拟去构造的话无疑会TLE!那么我们观察易得下一个数字的父节点必定是当前已加入的所有节点中比下一个节点大的所有数中的一个最小值,或者是当前已加入的所原创 2012-09-14 16:17:26 · 1248 阅读 · 1 评论 -
hdu (4268)贪心muliset的upper_bound和lower_bound
有童鞋A 和 童鞋BA想用手里的牌尽量多地覆盖掉B手中的牌..给出了T表示有T组样例..每组样例给出一个n 表示A和B手中都有n张牌接下来2*n行 有h w 分别代表A手中n张牌的高和宽 以及 B手中n张牌的高和宽问A手中的牌最多能覆盖B多少张牌思路:对一个坐标排序假设是x坐标然后扫描维护一个y坐标然后每次取的是堆里面最大的Tips:set里的一原创 2012-09-13 15:12:04 · 797 阅读 · 0 评论 -
hdu 4284(状态压缩)&& poj 3311 &&,,,
题目:给出一些城市,从1出发,旅游一圈回到1,由于花费可能不够,所以选择一些城市打工,打工之前需要花费d买一个证,工资为c。选中的城市必须去工作一次,而且只能工作一次,问能不能完成旅行。思路:先用floyd预处理,因为hdp[pos][statue]表示在statue的情况下到pos位置的能到达最多的钱。然后枚举 (1#include#include#include#in原创 2012-09-11 15:44:13 · 671 阅读 · 0 评论 -
分状态的树状数组hdu 4267
我们用tree[v][k][mod]来表示树状数组的状态。假如a、b、c、k,那么用树状数组,区间更新,update(b,a%k,k,c),update(a-1,a%k,k,-c) ,就可以了~~~也就是说,区间[1,b]内每个ui % k == mod ,那么ui 的值就加c ,然后[1,a-1]区间内每一个ui-c,于是就完成了[a,b]这个区间内的更新了~~查询q的时原创 2012-09-11 03:37:21 · 686 阅读 · 0 评论 -
hdu(4009)最小树形图自己建立root
题意:有n个地方需要供水,每个地方都可以选择是自己挖井,还是从别的地方引水,根据方法不同和每个地方的坐标不同,花费也不同,现在给出每个地方的坐标,花费的计算方法,以及每个地方可以给哪些地方供水(即对方可以从这里引水),求给所有地方供水的最小花费。思路:建立一个源点,到每个点的距离为自己打井的费用,其他的按条件建边。根据poj3164改过来的。#include #include #i原创 2012-08-28 13:24:25 · 575 阅读 · 0 评论 -
hdu(4007)正方形能框住最大的点数
暴搞呗。。。#include #include #include #include #include #include #include #define inf 1000300000using namespace std;const int N=1093;struct Node{ int x,y;}point[N];int n,R;原创 2012-08-27 16:31:35 · 855 阅读 · 0 评论 -
hdu(4006)优先队列求第K大的数
#include #include #include #include #include using namespace std;int main(){ int n,k; while(scanf("%d %d",&n,&k) == 2) { priority_queue,greater > Q;//min-->max for(i原创 2012-08-27 16:26:16 · 1848 阅读 · 0 评论 -
hdu(4021)八数码的解是否存在问题
题意:给出一个board,上面有24个位置,其中23个位置上放置了标有数字1~23的方块,一个为空位(用数字0表示),现在可以把空位与它旁边的方块交换,给出board的起始状态,问是否可以达到指定的状态。思路:看起来很像著名的“八数码”问题,首先,针对八个特殊位置(死角),如果这里有空位就把它和相邻的位置交换,这样之后如果两个状态的对应死角上的数字不同,那么显然是不能达到指定状态的,因为无原创 2012-09-03 17:38:11 · 1151 阅读 · 0 评论 -
hdu (4396:多校第十场):又见spfa求各种状态的最短路
本题题意:为找到至少走K条边的最短路。#include #include #include #include #include #include #include #include #include #include #define inf 1<<30using namespace std;const int N=5050;struct Node{ int v原创 2012-08-24 13:26:31 · 867 阅读 · 0 评论 -
hdu 4389:打巨表
题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求。即使你不会DP,也可以分段打表,比如10w为一个区间,统计这有多少个符合要求,然后对于一个数,先判断在哪个区间,再把之前的求和,对所在的区间暴力搜。记得打表用的函数:freopen("E:\\out.txt","w",stdout);#include #include #include #in原创 2012-08-21 22:31:44 · 9559 阅读 · 0 评论 -
hdu 4288(lower_bound&&upper_bound的运用)
#include #include #include #include #include #include #include using namespace std;int n;vectornum;//动态的数组int main(){ while(scanf("%d",&n)!=EOF) { num.clear(); int原创 2012-09-17 15:22:32 · 970 阅读 · 0 评论 -
hdu 4292(拆点的网络流)
题意:有F种食物 D种饮料 它们都有一定的数量 有N个人 每个人都有自己喜欢吃的食物和饮料 (每个人至少要一种食物和饮料) 只有能满足他的要求时他才会接服务 求最大能满足多少人?思路:网络流 建一超级源点 汇点 源点与食物相连 边权为其数量,汇点与饮料相连 边权也为其数量 把人分成两个点 之间的边权为1 每个人与之需要的食物和饮料相连 边权为1 #include#include原创 2012-09-17 22:15:05 · 650 阅读 · 0 评论 -
hdu 3938(离线的并查集)
题意描述:简单的讲就是,给你一张无向图,求有多少条路径使得路径上的花费小于L,这里路径上的花费是这样规定的,a、b两点之间的多条路径中的最长的边最小值!分析:因为考虑到数据的大小所以需采用离线算法先计算出结果后在统一输出结果!这里首先要从a到b的所有路径中筛选出这样一条路径(路径中的最长边是所有路径中最小),那么这就需要采用最小生成树kruskal的思想,那么任意两个集合A,B之间可以形成的路原创 2012-10-13 13:37:53 · 2372 阅读 · 0 评论 -
hdu(4325)线段树+离散化+lazy
给你N朵花开的区间,然后M个询问,问你这点有多少花开。因为-1e8#include #include #include #include #include using namespace std;const int N=100003;int n,m;struct Node{ int l,r; int v; int ly;原创 2012-10-29 02:45:10 · 632 阅读 · 0 评论 -
2-sat(2011年成都现场赛)
/*在2-sat中,i和j冲突,连两条有向边i-->j',j-->i'。那么当i和j要求不同时,如果i和j相同,就表示i和j冲突,连两条有向边i-->j',j-->i'。那么当i和j要求相同时,如果i和j不同,就表示i和j冲突,连两条有向边i-->j',j-->i'。求强连通分量,如果i和i'在同一SCC中,则无解,输出no,否则输出yes。*/#include#inc原创 2012-09-07 13:04:41 · 798 阅读 · 0 评论 -
2-sat总结
2 – SAT2 – SAT 就是2判定性问题,是一种特殊的逻辑判定问题。例,n对东西,每对只能选一个(i0或i1),不能不选。即:A or _A = 1 , A xor _A = 1还存在一些约束关系(i0,j0),表示i0不能跟j0一起选。那需连边i0-> j1 如果选i0的话必须选j1j0-> i1如果选j0的话必须选i1表示了一种递推的关系:选哪个必选哪一个一般转载 2012-07-12 22:51:08 · 648 阅读 · 0 评论 -
hdu(4435)天津现场赛
题意:给定每个点在平面内的坐标,要求选出一些点,在这些点建立加油站,使得总花费最少(1号点必须建立加油站)。在i点建立加油站需要花费2^i。建立加油站要求能使得汽车从1点开始走遍全图所有的点并回到1点,途中汽车加油次数不限,每个加油站的使用次数不限,但是汽车油箱有上限d(加满油可以跑距离d)。分析:突破口在于在i号点建立加油站的费用为2^i,这样特殊的花费会使得我们有一个贪心的规律,就是尽量不转载 2012-10-27 22:22:16 · 1074 阅读 · 0 评论 -
hdu (4414)(BFS+DFS)
/*暴力DFS+BFS,先DFS求出中心点,中心点的条件是它周围有四个点然后BFS判断是否为十字架,判断条件:'#'数量=4*层数+1自制测试样例:5o#oo#####oo#o#ooo###ooo#o5o#oo####ooo#o#ooo###ooo#o5oo#oooo#oo#####oo#oooo#oo3o#o###o#o0211*/原创 2012-11-05 12:43:23 · 1003 阅读 · 0 评论 -
hdu4391(线段树查找区间内出现的个数)
/*题意:刷墙, 以开始 有 n个节点,每个节点有一种颜色 ,m 次询问m次 输入 a,l,r,z 如果 a=1 将 l到 r 刷为 z 颜色,如果 a=2 询问 l 到 r 有 多少个 和 z 相同的 节点官方题解是: 分段哈希,自己一开始想写 一下 ,单写着写着 就 觉得很麻烦 ,各中判断条件。。。。。后来改为 线段树 优化了下 ,就是加了 个 mi mx 判断 查询原创 2012-11-03 21:42:56 · 2709 阅读 · 5 评论 -
hdu 4291 矩阵的快速幂(寻找循环节)
补充一个知识:摸运算肯定会出现的循环节的。那么循环嵌套,对内层求MOD,层层向外跳出。现暴力求出循环节,然后用矩阵的快速幂。构找矩阵的方法:一般的对于线性递推方程fn=a1fn-1+a2fn-2+……+aifn-i线性递推方程即形如 fn=a1fn-1+a2fn-2+……+aifn-i的方程以斐波那契数列为例 an=an-1+an-2我们的目的是通过矩阵乘法,求得斐波那原创 2012-09-19 09:21:44 · 1869 阅读 · 2 评论 -
hdu4366(线段树)
/*题意:给你 n个点。他们有 上下级关系,一个点只有一个上级,一个上级 可以有多个下级,每个点有两个属性,能力值 、忠诚度(每个节点的忠诚度不同),求我们要删除 一个节点, 则我们 需从 其下级中选出 一个节点,其能力值 比该节点 要高,且 忠诚度是(比其能力高的下级节点中的)最高题解:首先将树状结构,转化为 线状结构, 可以遍历一遍将树上每个点标记为一维区间上的某个点,且在同一棵子树原创 2012-11-03 16:28:49 · 1727 阅读 · 0 评论 -
hdu 4313(kruskal思想)
对于有n个结点的树,容易证明删除任意的k (k贪心算法:类似kruskal最小生成树的过程,不过此处将边按权值从大到小排列,每次将边加进来时要判断是否会使两个危险的点连通,是的话这条边就是需要被删除的,否则将它加到树上。#include#include#includeusing namespace std;int ac[110000],father[110000];__i原创 2012-10-23 10:29:11 · 554 阅读 · 0 评论 -
hdu 3954(线段树的特殊lazy操作)
发现最巧妙的就是定义了最小升级系数dis,因为这个变量相当有用,但是又不容易想到(看来思维真的很重要)。。。dis变量的定义,很好的将lazy结合起来了。就用简单的加减就很直观的转换。。那么在有了这个变量之后,我们也就可以像一般线段树那样操作了。。若当前lazy标记要更新,则传递给子树。。并把自己的lazy标记清空。。若当前最大经验值大于升级的所需经验时就开始往下更新,直到不能更新原创 2012-10-21 15:14:02 · 1793 阅读 · 0 评论 -
hdu 4307(dinic)精简版
从本质上讲,之所以能够用最大流解决这个问题,关键在于最大流可以求解下面这个函数的最小值:接下来就分析一下如何用最大流求解上面这个函数的极值。首先xi一共只有两种选择,那么最终可以按xi的取值将xi划分成两个集合,那么如果xi在值为1的集合里,xj在值为0的集合里,那么就会产生一个代价cij。同时如果xi选择0就会产生一个bi的代价,如果xi选择1就会产生一个ai的代价。于是构造一个原创 2012-10-16 15:15:02 · 1713 阅读 · 1 评论 -
hdu 3584 (三维树状数组模板 )
#include #include#include #include using namespace std;const int N=200;int C[N][N][N];int n,m;int lowbit(int a){ return a&(-a);}void Modify(int x,int y,int z,int c){ int tmpy,tmpz;原创 2012-08-21 02:30:40 · 800 阅读 · 0 评论 -
hdu(4005)floyd
给出没两点之间的最短距离,问合法还是不合法,合法请输出原图中最少加的边数。#include #include #include #define MAXN 110int Q[MAXN][MAXN];unsigned char flag[MAXN][MAXN];enum boolean { FALSE,TRUE};int N;int main(){ int T,CE;原创 2012-08-29 16:26:02 · 619 阅读 · 0 评论 -
hdu 1251(字典树)
经典的字典树题目。。字典树:又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。#include #include #include #in原创 2012-04-12 01:17:06 · 453 阅读 · 0 评论 -
hdu 1892(二维树状数组模板)
#include#include #include #include using namespace std;const int size = 1002;int C[size][size];int lowbit(int n){ return n&(-n);}void Modify(int x, int y, int de原创 2012-04-15 16:36:12 · 727 阅读 · 0 评论 -
hdu4000(一维树状数组模板)
求i<j<k且a[i]<a[j]<a[k]的组数#include #include using namespace std;const int N=100001;int C[N];int n;void init(){ for(int i=1;i<=n;i++) C[i]=0;}int lowerbit(int a)原创 2012-04-15 16:32:45 · 1337 阅读 · 0 评论 -
hdu 4337——poj 2438(哈密尔顿回路求解模板)
转:http://imlazy.ycool.com/post.2072698.html Dirac 定理:设一个无向图中有 N 个节点,若所有节点的度数都大于等于 N/2,则汉密尔顿回路一定存在。注意,“N/2” 中的除法不是整除,而是实数除法。如果 N 是偶数,当然没有歧义;如果 N 是奇数,则该条件中的 “N/2” 等价于 “⌈N/2⌉”。证明起来不难。首先可以证明图一定是连通的原创 2012-08-04 14:03:36 · 6106 阅读 · 1 评论 -
多校第三场:hdu 4320(小数的进制转换,有限小数的条件)
题意: 给出A和B,一有限小数的A进制数转换成B进制数也是有限小数的判定。 我觉得如果进制转换做的好点的话,这种题应该不难。 解法:一个小数的A 进制可以表示为:1/(A^1)+1/(A^2)+1/(A^3).....转换成B进制就是不断的乘B直到为0;(1/(A^1)+1/(A^2)+1/(A^3).....)*B^m,进一步化简,要是结果为有限小数,则B^m/(A原创 2012-08-01 12:30:37 · 1523 阅读 · 1 评论 -
HDU 4121(非常纠结的模拟)
起初是模拟红棋子能到达的都标记出来,然后判断黑棋子无法走了,就说明输了。但是这种想法是错的,因为红子在改动的时候回去影响其他棋子的范围,比较麻烦,还有的就是黑方可能把红色的棋子吃掉,从而黑方也不会输的。 唉,还是太年轻了,还有的思路:直接枚举黑方能到达的点,然后判断红方是否到达不就行了庅,非常简便。为啥开始想不到这个呢?这道是非常简单的现场赛题了,还很远。#include #原创 2012-06-28 17:52:12 · 1500 阅读 · 0 评论 -
hdu 2435(最小割 --dinic模板-- 最大流)
给定一个有向网络,边权为拆掉边的代价,现在1要到n去,n试图阻止1到达,它至少花多大代价。 条件是1可以在任意两点(不含1和n)加入一条边(此边不可被拆除),求n要花费的最小代价最大值。 如果没条件,那么就是求最小割。其实最小割就是求最大流。 可以枚举符合条件的所有的边,但是消耗太大了~这是题目要卡的地方。 所以用求最小割的时候,把源集记录下来,剩下的就是汇集了,这原创 2012-06-28 12:40:02 · 1371 阅读 · 0 评论 -
hdu 3938(离线并查集)
/* 离线并查集,边按小到大排序,询问也按小到大排序; 对于询问x,答案就是询问x-1的值加上询问x-1的L1和询问x的L2之间的边合并带来的值 对于一条属于L1和L2之间的边,如果端点u,v在一个集合中,忽略,否则新开的路是u 所在集合的大小乘上v所在集合的大小 */ #include #include #include using name转载 2012-04-14 15:33:31 · 602 阅读 · 0 评论 -
hdu 1873(queue) 看病要排队
/*是一道优先队列的模拟题,priority_queue array[]形式其中Type为数据类型,可以自己定义,本题为patient;container为容器,一般的写法为vector,本题为vector;function为比较形式,所以这题必须根据题目的要求写一个struct cmp;*/#include #include#include#include//优先队列的头原创 2011-10-03 20:44:36 · 832 阅读 · 0 评论 -
hdu 1598 find the most comfortable road(并查集+枚举图的各边)
#include #include #include #include #include using namespace std;struct sars{ int u,v,w;}s[1001];bool cmp(sars a,sars b){ return a.w}int n,m;int set[1002];int find原创 2011-11-30 22:56:43 · 485 阅读 · 0 评论 -
hdu 3829 cat&dog
题目连接: 点击打开链接题意:给你一群人个数p,他们要么喜欢狗讨厌猫,要么喜欢猫讨厌狗,在自己喜欢的动物留下且自己讨厌的动物他们会happy,求管理员最多能让多少人开心 。思路:求最大独立点集,因此必须求出最大匹配m,关键是建立边,把他们爱好相互矛盾的建立无向边,则解为原创 2011-10-07 23:16:24 · 600 阅读 · 0 评论 -
多小第一场:hdu:4305(矩阵求生成树的个数+乘法逆元)
题目模型:给定平面上N个点。如果两点距离小于等于R,且两点间线段上没有其他点的时候,两点可以建立一条边。得到这个图后,求此图的生成树个数 mod 10007,如果图不连通则输出-1. 第一部分:构图。枚举两点是否符合距离限制,如果符合则对比此两点方向向量上是否有距离更小的其他点,然后根据情况建边删边。(O(N*N*log(N))) 第二部分:如果图连通,则根据生成树定理原创 2012-07-23 14:18:36 · 3191 阅读 · 0 评论