- 博客(147)
- 收藏
- 关注
转载 图论500题
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2017-11-13 16:08:33 283
原创 那么来一波模板吧=。=
ST表(RMQ问题) //打表与查询 这个是针对最大最小值 void STpre() { for(int i = 1; i <= n; i++) dp[i][0][0] = dp[i][0][1] = d[i]; for(int j = 1; (1<<j) < n; j++) for(int i = 1; i <= n; i++)
2017-06-29 18:38:30 272
原创 网络流24题 (6/21)
flag待补全 5/21 提交地址:cogs一般dinic算法求最大流,E-k+bellman求费用流[网络流24题] 搭配飞行员思路: 二分图最大匹配建图 代码:#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <queue>using namespace st
2017-08-04 17:46:28 430
原创 POJ - 3764 The xor-longest Path (01字典树)
POJ - 3764 题意: 求树上两个结点间路径的XOR值的最大值。 思路: 可以知道任意两个结点,设从根到这个结点的dis[u] = XOR路径和,那么u->v = dis[u]XORdis[v]; 因为他们的dis[lca(u,v)]会因为被XOR两次而不会对结果造成影响,所以这就成了求dis[i]中两个值的XOR最大值,可以用01字典树维护,每对一个dis[i]值,先查询再插入。#i
2017-08-04 17:15:42 292
原创 斜率优化DP
HDU - 3507 Print Article HDU - 2829 LawrenceHDU - 1300 PearlsHDU 3480 DivisionHYSBZ 1010 玩具装箱toyHYSBZ - 1096 仓库建设HDU - 3507 入门题。#include <cstdio>#include <iostream>#include <cstring>#in
2017-07-28 19:52:24 286
原创 Fzu上的重现赛
5小时内:A 水D KMPK 组合数求%和错排问题L 模拟题之后:B 计算几何基础A 没啥好写的,鸡兔同笼…D kmp,对了比赛时我没判断后面那个串后面有没有0也过了,但是应该是需要判断的。L 题意:判断先手下两步,后手下一步,先手能不能赢。 思路:模拟,判断直接赢,下一步赢,和模拟A下一步,B下一步的所有的过程。#include <cstdio>#include
2017-07-24 18:42:36 245
原创 计算几何基本板子(待补)
基础点乘叉乘操作:struct point{ int x,y; point(){} point(int a,int b){x = a;y = b;} bool operator== (point b) { return (x == b.x) && (y == b.y); } point operator- (point b) { re
2017-07-24 18:25:40 365
原创 求逆序对
POJ - 2299题意就是求逆序对,当然还有别的方法,如果之后写了会补充树状数组:#include #include #include #include using namespace std;#define ll long longconst int maxn = 5e5 + 50;int d[maxn],id[maxn];ll sum[maxn];int lo
2017-07-21 23:49:51 258
原创 HDU - 5667 Sequence(矩阵快速幂+费马小定理)
写这题的时候压根不知道费马小定理是啥HDU - 5667 Problem Description Holion August will eat every thing he has found. Now there are many foods,but he does not want to eat all of them at once,so
2017-07-20 23:42:22 392 1
原创 HDU - 5862 Counting Intersections (扫描线应用)
HDU - 5862Problem DescriptionGiven some segments which are paralleled to the coordinate axis. You need to count the number of their intersection.The input data guarantee that no two segmen
2017-07-20 23:31:47 366
原创 K-th number
归并树划分树分块目前只看会了第一种,在POJ - 2104上跑了接近4s,POJ - 2761直接超时。发现自己的二分....真的水归并树:#include #include #include #include #include using namespace std;const int maxn = 1e5 + 10;const int inf = 0x3f3f3
2017-07-20 19:58:52 255
原创 HDU - 5861 Road(线段树)
HDU - 5861Problem DescriptionThere are n villages along a high way, and divided the high way into n-1 segments. Each segment would charge a certain amount of money for being open for one day,
2017-07-19 11:38:13 282
原创 HDU - 3974 Assign the task (线段树 + dfs序)
HDU - 3974题意:有个公司有一些关系,每个人(除了boss)都有且仅有一个上司,这就是一棵树的关系,然后会有一些操作,C i,询问第i个人现在的任务,T x y,把y任务给x, 给x相当于给x及他所有的下属,新任务会覆盖旧任务思路:这是我写的第一个(除了联通图那些)需要用dfs序的题,最近有毒,wa到不敢相信自己....因为i节点的子树在dfs访问序列中肯定是连续的,所以可以把
2017-07-18 19:02:34 301
原创 HDU - 5857 Median (不那么简单的模拟)
HDU - 5857 题意: 给一个已经排好序的序列,然后给你两个区间,问这两个区间的中位数是多少。思路:直接模拟一定超时,所以得考虑不同的情况,:)贼容易错!中间变量会超long long不同的情况就是区间不相交和区间相交,区间相交的那一段每个元素有两个。代码:#include #include #include #include #include #include
2017-07-17 13:13:31 381
原创 Educational 25 ABCD
ABC都是靠细节的。A#include #include #include #include using namespace std;char str[100];int out[20];int main(){ int n; scanf("%d",&n); scanf("%s",str); int onum = 0,temp = 0;
2017-07-17 13:09:02 225
原创 HDU - 5858 Hard problem (简单几何?)
HDU - 5858 题意:...高中求面积的题?:)虽然题目说是小学可我强行要看成高中的!通过(bd+bc)^2 + ad^2 = ac^2可以算出sin∠acb的值,然后的事情就很简单了。#include #include #include #include #include #include #include using namespace std;con
2017-07-17 12:57:33 304
原创 BZOJ - 1864 三色二叉树 (树形dp)
BZOJ - 1864中文题题意不解释~还是比较基础的树形dp~思路: 每个父亲节点还是由子节点推过来的,所以只需要统计子节点的状态就可以了,用dpa[i][j]来表示涂绿,蓝和啥的时候最多有几个节点是绿色的,dpi则是表示最少有几个节点是绿色的。#include #include #include #include using namespace std;const i
2017-07-14 18:40:27 237
原创 盛大杯部分题
题目的地址F优化过的最长上升子序列G...暴力H...暴力?I博弈论K 贪心+二分待补:J,MF:思路:具体的优化见挑战程序设计竞赛,cache[i]表示最多为长度为i+1的段的最后一个元素最小是什么,由这个可以快速求出dp[i]的值,dp[i]表示第i个元素最多能多长,而求反向的最长序列就是反过来再求一遍代码:#includ
2017-07-12 12:09:33 225
原创 POJ - 1459 Power Network(网络流最大流)
POJ - 1459 题意:看题看的心累,其实就是所有power station是源点,所有consumer是汇点,然后就是一个最大流问题了~ 读入写的有点蠢,其实scanf(" ()") 这种就够啦~ 另外,对于单路增广的dinic来说,当前弧优化真的很有必要。#include <cstdio>#include <cstring>#include <algorithm>#include
2017-07-12 10:17:26 241
原创 POJ - 2195 Going Home (费用流 水)
POJ - 2195题意:这道题题意还是很清晰的思路:这个连边就更清晰了....#include #include #include #include #include #include using namespace std;const int maxn = 200 + 10, maxe = maxn*maxn,inf = 0x3f3f3f3f;struct nod
2017-07-11 09:35:23 204
原创 POJ - 1087 A Plug for UNIX (最大流)
POJ - 1087题意:写这种题目,(有翻译情况下)我的看题时间 = 想 + 敲代码,生无可恋.jpg一个房间里有很多插座,一种类型的插座只能容纳一种类型的插头,还有一些适配器,使不同类型的插头可以插到某个插座上,适配器还可以嵌套使用,虽然适配器种类不多,但是可以无限提供,使尽可能多的用电器插上插座,那么最后会有几个用电器无法接上插头思路:明显的,插座和插头一一对应,连边,cap =
2017-07-11 09:32:30 282
原创 POJ - 3281 Dining (最大流)
POJ - 3281 题意: 很多只牛,每只牛都有很多喜欢的食物和饮料,但是每次只能选一个食物和一个饮料,问最终能使多少牛满意思路: : ) 我能说我是当二分图写的吗,但是后来发现,如果直接连饮料和食物,那么会出现,一只牛喜欢的,可能会有超过一个牛的匹配出现,所以不能这样,其实这里的牛和饮料,牛和食物,分别是一个二分图,他们的限制就是牛只能选一个食物,一个饮料,那么就需要把牛拆点,这样
2017-07-11 09:20:43 174
原创 POJ - 3436 ACM Computer Factory ( 最大流 )
POJ - 3436题意:... 大意就是有几台机器可以把半成品加工成成品或者另外的半成品,问你最终每小时得到的最多的成品。思路:那么由题目,这个机器出来的零件个数和另一个机器需要的零件相同时(2的位置不算),他们肯定有条线,但是这里可以看出,对机器每小时有限制数量,这是对点有限制,而不是对边有限制,所以需要拆点,我第一遍写的时候没拆,但是过了,估计数据比较弱.....没拆点的:#
2017-07-11 09:14:17 224
原创 dfs+bfs专题(简单题)
A.迷宫问题 POJ 3984bfs + 输出路径#include #include #include #include #include using namespace std;int maze[5][5];int way[4][2] = {0,1,1,0,-1,0,0,-1};struct node{ int x,y,s,pre; node(int
2017-07-11 09:03:35 1004
原创 【dp每一天】POJ - 3107 Godfather (树形dp)
额这题也挺水的。题意:找树上满足去掉它之后,剩余连通的结点块中最大的那一块最小的结点们。思路:有 dp[u] = max(sum[v], n - sum[u]); v是u的子结点代码:#include #include #include #include using namespace std;const int maxn = 5e4 + 10,maxe = maxn
2017-07-07 23:34:11 197
原创 HDU - 1054 Strategic Game(二分图匹配写法)
HDU - 1054题意:就是求最小顶点覆盖。树形dp过了的题,看着是说怎么这么眼熟思路:这个二分图比较好想的,找个根,与根的最短距离为奇数的点丢在一部分,是偶数的点丢在另外一部分,然后连边求边的匹配。讲真我现在看到一些图还是觉得懵,不知道如何建图...今天看网络流好不容易把那个最基础的算法弄懂了点点,想要看一下题,结果第一题就不知道怎么建图....有点绝望....#include
2017-07-05 23:44:09 232
原创 【dp每一天】POJ - 1655 Balancing Act(说是树形dp其实就是模拟?)
POJ - 1655题意:求树的结点种去掉点后形成的森林的结点的最大值中的最小值。思路:讲道理,我感觉这是模拟.....和昨天那道题很像。因为去掉结点,自己的子树肯定是分开的,所以对于u而言,它的balance就是max(sum[v],n-sum[u]); v是u的各个子树的结点数量。#include #include #include #include using name
2017-07-05 23:38:22 171
原创 【dp每一天】 POJ - 3140 Contestants Division (树形dp)
这个故事告诉我们 long long的abs需要自己写:)#include #include #include #include using namespace std;#define ll long longconst int inf = 0x3f3f3f3f;const int maxn = 1e5+20, maxe = 1e6+10;int n,m;struct no
2017-07-04 23:59:31 206
原创 HDU - 2819 Swap (二分图匹配)
HDU - 2819题意:矩阵都是0和1,问能不能通过交换行和列使矩阵的对角线上的数字全部为1。思路:二分图匹配的难点就是如何建图.........这题可以想,只要不同行不同列 都有一个值为1,那么肯定可以通过交换达到题目要求的条件,当然,每行每列也只需要一个1就够了。所以以行列分开来建图,找最大匹配,然后从第一行(列也可以,看建图是什么)开始找,如果这里列=行,那么继续,如果不是,那肯定
2017-07-04 12:56:15 340
原创 HDU - 1281 棋盘游戏 (二分图匹配)
HDU - 1281题意:中文题题意还比较好理解。思路:肯定又是行列分开,行是一个二分图的x部,列是y部,这里不影响攻击,可以推出每行每列最多一个兵(可能有些位置不能放,所以可能有的行是没有的),如果把这条边(也就对应一个位置)删掉,答案减少,那么这条边(这个位置)一定是重要点。枚举 + 匈牙利开始写的时候,我把所有的匹配边删掉了,再第二次匈牙利计算答案,后来发现连样例都过不了,才发现
2017-07-04 12:49:02 276
原创 【dp每一天】POJ - 1463 Strategic game (树形dp)
POJ - 1463题意: 全部边覆盖,所加的士兵的最小值,递推式可直接看代码。说起来边覆盖感觉好像。。二分图?#include #include #include #include using namespace std;const int maxn = 1600;struct node{ int to,next; node(){} node(in
2017-07-04 00:05:15 185
原创 HDU - 1083 Courses(二分图匹配)
HDU - 1083 题意:就是求最大匹配是否是完美匹配。#include #include #include #include using namespace std;const int maxn = 500,maxe = 3e5;struct node{ int to,next; node(){} node(int a,int b){to = a
2017-07-03 13:25:25 191
原创 HDU - 2444 The Accomodation of Students(二分图匹配)
HDU - 2444 题意:有两两认识的一些同学,但是a认识b,b认识c,不代表a认识c,求这个关系能否构成二分图,以及最大匹配#include #include #include #include using namespace std;const int maxe = 4e4 + 50,maxn = 250;struct node{ int to,next;
2017-07-03 13:21:52 199
原创 HDU - 1045 Fire Net 二分图匹配/dfs/枚举)
HDU - 1045 题意:题意很简单,就是判断最多能放多少个这道题好想说一句:买一赠三啊!因为数据范围小,所以这个题目写法挺多的。二分图还可以用网络流?(没学过暂时不知道,不过估计也快写了...)。匈牙利/dfs/按位枚举。按位枚举:#include #include #include using namespace std;int d[10][10];int
2017-07-01 19:04:44 275
原创 关于二叉树
HDU - 1710题意:前序中序求后序#include #include #include using namespace std;const int maxn = 1050;int a[maxn],b[maxn];int n;struct node{ int v,l,r;}tr[maxn << 2];int num = 0;int build(int
2017-07-01 15:59:07 162
原创 HDU - 1814 Peaceful Commission(一个粗暴的2-sat)
HDU - 1814 题意:直白的2-sat,但是这个是要输出最小的字典序,那么我们只能选择暴力。思路:我的暴力的想法是,枚举每对元素,先优先取靠前的那个,把它所有连了边的都取了然后打tag,如果它不会产生矛盾,那么继续,如果有,那么先把所有的tag取消,再判断a+1有没有矛盾,如果a+1也有矛盾,那这组数据就已经gg了。我已经是个蠢到取消tag也要用dfs的人了,看了别人的暴力...基本
2017-06-30 13:40:06 279
原创 【dp每一天】HDU - 2084 数塔(水dp)
...感觉这篇像凑数一样.....不过这个在算法课上讲的时候我也没实现过,正好这次写了写。HDU - 2084#include #include #include using namespace std;int d[110][110];int dp[110][110];int main(){ int t,n; scanf("%d",&t);
2017-06-29 23:34:46 190
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人