![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM/ICPC
文章平均质量分 57
粽子猪zZ
这个作者很懒,什么都没留下…
展开
-
vijos 1028 最长上升序列。
换一个角度看问题。这道题其实就是原创 2014-04-11 17:42:11 · 536 阅读 · 0 评论 -
hdu1385 floyd+保存路径。另附spfa
该题的难点在于求字典序中最小的路径。如果用spfa的话,预见原创 2014-08-06 02:18:56 · 523 阅读 · 0 评论 -
hdu 3687 反向拓扑排序
拓扑排序的几个方式原创 2014-08-03 21:59:34 · 488 阅读 · 0 评论 -
hdu 1075 字典树 和 map做法
开始写的时候Runtime Error(ACCESS_VIOLATON)苦逼死了。主要是因为刚学trie吧。附上代码 #include #include #include using namespace std;typedef struct note{ char ch[20]; bool ok; struct note *next[26];}trie;voi原创 2014-03-26 15:58:57 · 557 阅读 · 0 评论 -
最短路径 hdu2544 dijkstra算法
与prim算法好像。。#include using namespace std;const int maxn=100000000;const int mm=1000;int n,m,map[mm][mm];int dijkstra(){ int cost[mm]; bool v[mm]; for(int i=2;i<=n;i++) //prim算法也是从第二个开始 {原创 2014-02-22 20:35:52 · 574 阅读 · 0 评论 -
zoj 1008
就是把相同的块放一起,就可以缩短原创 2014-07-26 22:01:38 · 558 阅读 · 0 评论 -
zoj2913
经典的BFs题目。从公交车路线经过的每一个城市出发,原创 2014-07-27 16:40:18 · 506 阅读 · 0 评论 -
zoj1232 floyd+dp
解法:原创 2014-08-05 14:57:33 · 497 阅读 · 0 评论 -
zoj1655 spfa 最长路径
将权值设为1-p,求从点n到各点的最大权值之原创 2014-08-05 21:43:43 · 495 阅读 · 0 评论 -
zoj 3088 spfa 最短&最长路径
一看就知道要建立两个图- - 一开始写不知道哪里原创 2014-08-06 22:09:27 · 813 阅读 · 0 评论 -
差分约束系统--详讲
总的开说差分约束问题就是给出一系列不等式然后求问某一式子的最大值或者最小值。差分约束问题详解: 比如有这样一组不等式: X1 - X2 X1 - X5 X2 - X5 X3 - X1 X4 - X1 X4 - X3 X5 - X3 X5 - X4 全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘以-1就可以化成原创 2014-08-07 23:37:02 · 836 阅读 · 0 评论 -
hdu4819 & poj2019 二维线段树
树套树~~ x线段树的每一个点都对应一个y线段树 这样就形成了二维线段树二维线段树最大的理解难点在于对点的push_up,即由右往左更新和由下往上更新这两个地方,还有就是x线段的每一个点都对应一个y线段树hdu 4819#include <map>#include <set>#include <queue>#include <stack>#include <math.h>#includ原创 2015-05-28 14:03:33 · 463 阅读 · 0 评论 -
hdu 1394 树状数组
题意:给出一列数组:a1,a2------an,一共有N个变形:a1, a2, ..., an-1, an (where m = 0 - the initial seqence)a2, a3, ..., an, a1 (where m = 1)a3, a4, ..., an, a1, a2 (where m = 2)...an, a1, a2, ..., an-1 (whe原创 2014-01-19 17:13:03 · 547 阅读 · 0 评论 -
vijos 1234 最小生成树kruskal
kruskal算法可以计算生成几棵树。而prim算法不行。附上代码:#include #include using namespace std;int f[100000];struct tt{ int a,b,c; bool operator < (const tt &that) const { return c < that.c; }原创 2014-02-21 22:25:03 · 605 阅读 · 0 评论 -
vijos p1208 博弈论
1、vijos p1208欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的。给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的数的正整数倍,当然,得到的数不能小于0。然后是Ollie,对刚才得到的数,和M,N中较小的那个数,再进行同样的操作……直到一个人得到了0,他就取得了胜利。下面是他们用(25,7)两个数游戏的过程:Sta原创 2013-12-09 14:17:59 · 714 阅读 · 0 评论 -
HDU5469 树分治、hash
题意:问能否在树上找到一条路径使得路径经过的点的单词可以组成提问的串~~树分治 肯定还有hash~~~sb的想法就不说了~~~这里开一个int in_pre[]、in_suf来记录是这个前缀以及这个后缀是否出现了 int型用来当时间戳~~直接进行点分治、然后对于当前点的子树要进行DFS、4次第一次找出当前子树(不包括根)、串的后缀,看看之前的子树没有前缀进行匹原创 2015-10-06 18:11:43 · 468 阅读 · 0 评论 -
hdu5458 LCA+并查集+树状数组
题意:给出n个点、m条边(可能有环、重边)、q个询问~~询问1:=删除某一条边 询问2:=问路径中有多少条桥~~~桥、如果将环收缩的话,图会变成一个树。那么有多少条桥也就是问路径的大小。即deep[a]+deep[b]-a*deep[lca(a,b)].首先图是删边的,很麻烦~~所有离线逆过来处理。对于要“添加的边“先标记。利用剩下的没有动过的边跑一趟dfs序原创 2015-09-22 18:17:05 · 472 阅读 · 0 评论 -
poj2778 & hdu 2243 AC自动机+矩阵 &&BZOJ2938
AC自动机。 具体可以详看AC自动机 做这几道题需要注意一点、、如果某节点A的fail指针指向标志节点,那么这个节点A也是标志节点。如图 节点4和节点6肯定是病毒,由于节点3的fail是节点6且是病毒,导致3也是病毒。病毒的递推关系可以传递。对DNA建立好AC自动机。如果需要找出一条DNA链不包含病毒DNA,那么也就是说这条DNA链一直无法在AC自动机上面进行匹配。也就是不经过原创 2015-08-13 22:01:33 · 541 阅读 · 0 评论 -
HDU 4270 SAM 后缀自动机
题目:给出一个串,有3种操作,操作1:在原串后面,添加一个串操作2:查询长度为len的子串或者长度小于等于len的后缀中字典序最小的操作3:删除最后的len个字符关于删除首先明确一点: 新建的点只与模板点有关系由新加入的点7产生的点8是根据点3为模板进行复制的(复制所有信息,包括位置)。那么点8是有点3控制的。可以从两个图看出,删除点7,不删除点8也是可以原创 2015-03-30 22:20:37 · 691 阅读 · 0 评论 -
hdu3157 有源汇上下界最小流
/*有源汇上下限最小流(1)添加超级源点ss和超级汇点tt (2)对于原有的边(u,v,l(u,v),c(u,v))(l为流量下限,c为流量上限),添加边(u,v,0,c-l); (3)对于每个结点i,记w[i]=l(u,i)-l(i,v)=f(i,v)-f(u,i);出-入 若w[i]>0,添加边(ss,i,w[i]),若w[i]<0,添加边(i,tt,-w[i]); (4)求解原创 2014-12-10 23:33:42 · 526 阅读 · 0 评论 -
hdu 1671 字典树
#include #include using namespace std;const int maxn=10;bool ok;typedef struct note{ bool isphone; struct note *next[maxn];}trie;void insert(trie *root,const char *ch){ trie *p=root; whil原创 2014-03-25 23:31:40 · 446 阅读 · 0 评论 -
hdu 3308 线段树+区间合并
有条件的区间合并。另设一个数组储存数据。判断条件成立后才进行区间合并。#include #include #include using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int Max=100000+100;int date[Max<<2],rmaxn[Max<<2],l原创 2014-02-09 14:26:29 · 506 阅读 · 0 评论 -
hdu 3397 区间合并 + 异或处理。
本题最困难处就是 operation 2 处理上由于数据只有 0 和1 两个数字所以当执行operation 2 处理时 对其异或即可。#include #include #include #include using namespace std; #define lson l,m,rt<<1#define rson m+1,r,rt<<1|1con原创 2014-02-08 23:17:20 · 610 阅读 · 0 评论 -
zoj 2788 网络流sap+最小割
建图:() 如果某房间原创 2014-08-17 22:40:00 · 588 阅读 · 0 评论 -
2-sat建图以及刷题记录~~
A[x]NOT A[x]A[x] AND A[y]A[x] AND NOT A[y]A[x] OR A[y]A[x] OR NOT A[y]NOT (A[x] AND A[y])NOT (A[x] OR A[y])A[x] XOR A[y]NOT (A[x] XOR A[y])A[x] XOR NOT A[y] 建立有向图。若图中存在有向边i->j,原创 2015-09-14 17:41:01 · 536 阅读 · 0 评论 -
01规划 最优比例生成树&最优比例环
可能见得最多的就是最优比例生成树,常用的解决方案就是二分枚举答案。 最优比例生成树一般求解最大值,如果求最小值那么转换成最大值的倒数即可。求最大值的检测条件是使得式子>=0。最优比例环,一般求解最小值,如果求最大值那么转换成求最小值的倒数。 求最小值的检测条件是图存在负环。bzoj 1486 最优比例环 在这道题里如果用spfa或许会tle。可用dfs式的spfa判断负环,沿着边权和减少的方向原创 2015-07-13 19:50:41 · 564 阅读 · 0 评论 -
kru生成树变种 poj3522 bzoj 1196
最小生成树 kru算法的变种原创 2015-05-04 12:41:59 · 477 阅读 · 0 评论 -
bzoj 1500 splay伸展树
splay可以支持区间操作 简单一个需要注意的事项 在实现翻转的时候,切记不可以直接rev[key_value]^=1,需要调用一次update_rev(key_value),直接翻转左右孩子,首次标记的时候不能直接标记等下一次再翻转。#include <map>原创 2015-05-22 17:12:54 · 430 阅读 · 0 评论 -
bzoj1208 splay伸展树
splay伸展树主要有两种操作形式 (1)正常的二叉树插入形式 功能:a、查找 b、求最大值 c、最小值 d、求前驱 e、求后继 f、删点 g、合并splay树 (这里的删除直接利用splay树的结点下标) (2)区间形式 (插入是以区间形式插入的) 区间形式的伸展树相当于线段树,支持线段树的所有操作,并且还支持区间插入这个功能, 比如操作区间[a,b]原创 2015-05-25 16:26:28 · 1298 阅读 · 0 评论 -
bzoj 1199 二分暴力
这道题的数据范围是25W...直接暴力。。。将所有点按照x排序之后。遍历所有的矩形和圆,用upper_bound和lower_bound寻找出符合x坐标的所有点,(位于区间[s,t]),然后暴力枚举所有点判断是否在当前形状内。。好黄好暴力。upper_bound和lower_bound的新用法~~#include #include #include #include#inc原创 2015-08-12 15:47:34 · 349 阅读 · 0 评论 -
bzoj 2502 有上下限的最小流
觉得有可能是网络流~~但是题目一直说是最小次数~~~一直卡在最大流这个思维,都快忘记有最小流这个东西了~~~~建图方式:每条边设下限为1,上限为无穷大 s连接到每一个点,下限为0,上限无穷大 t连接到每一个点,下限为0,上限无穷大这样跑一个有上下限的最小流,就可以得出答案了~~~所有边都被遍历了~~~#in原创 2015-07-17 19:16:45 · 488 阅读 · 0 评论 -
poj3695&bzoj1853 容斥定理
~ps..求一个区间内有几个数和m互质,可以先求出m的质因数,求这个区间的m的质因数的倍数的总和(容斥定理),然后用区间总数减去这个数就是所要求的互质数量了~~~poj3695 题意:给出n个矩形,每次询问若干个矩阵的面积并。 在这里由于线段树太伤了,所以就不用这个方法了~~改用面积并。 遍历一次并操作,维护符合的询问即可#include <map>#include <set>#inclu原创 2015-06-02 00:14:34 · 486 阅读 · 0 评论 -
bzoj 1895||poj3580
对于移位操作,其实就是将[y-t+1–y]区间移动到[x,y-t+1)区间前面 具体操作: 首先取出[x,y] 区间,然后再在选取的区间内取出[y-t+1,y],然后将区间移动到最左边即可,维护过程中记得push_down(),但是别维护过头了~~#include原创 2015-05-25 12:33:26 · 599 阅读 · 0 评论 -
bzoj 1189 二分+BFS+网络最大流
~~~~~~~~~~~~~~~~~题目大意:紧急疏散。有一张地图,‘.’表示人,‘D’表示门,人需要走曼哈顿距离的单位时间才1能到达门。一个门一个时刻只能通过一个人。求多长时间能疏散完毕。首先第一感觉肯定要BFS,要算出每个人到每个门的用时其次,优化题目意思,t时间,有num个人可以到达door[i],但是最多仅有t个人可以穿过这个门(每秒钟只可通过一个人),这就清晰的出现一个网络最大原创 2015-05-05 10:42:01 · 459 阅读 · 0 评论 -
bzoj 1091 裸半面交
枚举割边的次序,8!种可能每次割边总为新的平面贡献两个新点(也可能是旧点),两点构成的边即新边,新边距离和就是ans#include #include #include #include #include #include #include #include #include#include #include #include using namespace std原创 2015-05-02 13:38:54 · 501 阅读 · 0 评论 -
bzoj 1696 贪心
/*其实sum和min都可以拆开的即求min( sum{|x-xi|} + sum{|y-yi|} )那么思路很清晰了,,,对于奇数。只有一个中位数,那么我们找1~n所有x的中位数和y的中位数,,这个就是它的点。。但是要注意,这个点不能和牛重合。如果重合,那么就取牛的上下左右四个点,即“没有两头牛的吃草位置是相邻的”,可以证明这是最优。。对于偶数。有2个中位数,,那么我们就要找这两个中位数中所有的可转载 2015-07-12 19:00:26 · 416 阅读 · 0 评论 -
bzoj2506 离线操作
~~~挺神奇的一道题!!!!!!!!这道题满足区间减法,所以把一个区间【L,R】询问拆为【1,R】区间的答案减去【1,L-1】区间的答案。将p分为两类,一类为p100;当p当p>100时,符合条件的数最多有101个,所以也基本是暴力~~开一个数组储存当前数出现了几次。遍历到前点i,更新数组,找出询问区间【1,i】,然后直接暴力查询k+n*p出现了多少次。#include原创 2015-07-17 21:51:07 · 492 阅读 · 0 评论 -
zoj3229 有源汇上下界最大流
/* 有源汇上下界最大流 对于有流量上下限的有源汇的网络流的可行流转化为一般先转换成无源汇判断是否有可行流再求解 (1)添加超级源点ss和超级汇点tt (2)对于原有的边(u,v,l(u,v),c(u,v))(l为流量下限,c为流量上限),添加边(u,v,0,c-l); (3)对于每个结点i,记w[i]=l(u,i)-l(i,v)=f(i,v)-f(u,i);出-入原创 2014-12-10 20:42:35 · 551 阅读 · 0 评论 -
zoj2587 sap最小割+判断割的唯一性
http://www.cnblogs.com/ka200812/archive/2011/07/30/2121872.html判断割原创 2014-08-17 21:00:06 · 433 阅读 · 0 评论 -
差分约束题集:zoj 2770&poj1364&poj1275&poj3169
zoj求最小值:(差分不等式a-b>=c,求最长路,得到最小值)#include #include #include #include #include #include #include #include #include#include #include using namespace std;typedef long long ll;int dist[101原创 2014-08-08 17:32:43 · 899 阅读 · 0 评论