自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(123)
  • 收藏
  • 关注

转载 [转]ACM-ICPC比赛随想——刘汝佳

自己接触acm也这么久了,到底我们acmer这般为acm废寝忘食值不值得???个人觉得刘汝佳的这篇文章讲的非常好。。。刘汝佳,1982年12月生,毕业于重庆外国语学校,清华大学计算机科学与技术系2005级研究生。高二时创立“信息学初学者之家”网站(OIBH),高三入选IOI2001国家集训队。大学一年级时获ACM/ICPC世界总决赛银牌(世界第四),IOI200

2013-09-09 21:28:21 1518

原创 2016腾讯IEG实习面试

四月初稀里糊涂过了笔试之后,收到了面试通知。    由于之前只是很想做游戏,但并不确定自己想去什么岗位,于是瞎填了一个。。。一面开始,面试官看了我的简历说:    “你好像很喜欢做游戏啊。。。”    “係啊。。。”    “那我把你推荐给做游戏的同事把”    “吼啊。。。”    。。。    于是一面面了两分钟便把我换给了另外一个面试官,这次应该才算是正式的一面:

2016-07-09 22:59:10 7308 1

原创 2016/05/06

/* vector:动态数组,头文件 #include 定义:vector vec_name; */ //定义整形vector vector a; //向容器末尾动态添加元素 a.push_back(1); a.push_back(2); //返回元素个数 int n = a.size(); //遍历容器 for(int i=0; i<n; i++)

2016-05-06 14:52:24 640

原创 2016/05/06

vector:动态数组,头文件 #include 定义:vector vec_name; //定义整形vector vector a; //向容器末尾动态添加元素 a.push_back(1); a.push_back(2); //返回元素个数 int n = a.size(); //遍历容器 for(int i=0; i<n; i++) { cout<

2016-05-06 14:43:22 623

原创 Codeforces 593D - Happy Tree Party(树链剖分)

#include #include #include #include #include #define lson l, m, rt<<1#define rson m+1, r, rt<<1|1using namespace std;const int maxn = 200020;const long long INF = 1e18;int n, m, total, edg

2015-11-06 15:00:52 864

原创 URAL 1721 Two Sides of the Same Coin(二分匹配)

只看最后两段就行了。。题意就是,有些会statement,有些人会testdata,有些人两种都会。然后每个人有一个rank值,rank值相差2的两个人可以合作,求最大匹配。注意rank值相差2的人可以相互合作,也就是说,我们要把图分成二分图,使得能跟左边任意一个节点配对的点一定在右边。这样只需将rank % 4 = 2的人放在右边节点就行了。#include#include#

2013-11-26 21:33:41 1237

原创 URAL 1715 Another Ball Killer(大模拟)

在搞这种SB模拟题之前。。。一定要先把sample算明白。。。不然会很悲剧的。。。具体思路没什么好说的了吧,每次都找当前最大的连通块,当前没有连通块或者当前最大连通块小于2的时候(坑)终止就行了。注意题目中algorithm中的第三行的while...不是if...get_score(key, type)函数用于找当前主颜色为key的时候的最大连通块,type为0的时候找非主色调的最大块,

2013-11-26 21:07:10 1247

原创 zoj 3732 Graph Reconstruction(构造)

预备知识:Havel-Hakimi定理先跑一遍Havel_Hakimi算法判断是否有解。对于判断多解的情况,再跑一遍Havel_Hakimi,如果sort(p+i, p+n)排序后,从i分别向i+1, i+2...i+p[i].d连边时,如果i+p[i].d跟i+p[i].d+1的剩余度数相同,那么交换这两个点在剩下的图中的位置,就能得到两个不同的图了。坑:当边数为零的时候,也要输出两

2013-11-25 14:55:26 1564

原创 hdu 4784 Dinner Coming Soon(优先队列+spfa)

看完题目的开头,大概是个二维spfa,产生了此题可搞的幻觉。。。接着就看到了这句“But the matter is not so simple.”,次奥,看来是个三维的呢。。。接着就看到了这句“However, the problem is more complicated than imagine. ”,尼玛四维。。。好吧,四维spfa本质还是spfa吧。。于是就出现了在hdu各种

2013-11-18 19:19:09 1610

原创 hdu 4781 Assignment For Princess(构造法)

构造一个n个点,m条有向边的图,需要满足两个要求:1.任意一对点对之间最多有一条有向边,且没有自环。2.保证图联通,m条边的边权严格属于[1, m]且互不相同,从任意点出发,经过任意路径后回到起始点,经过的边权总和是3的倍数。其中第二个要求似乎听上去很玄乎,其实可以一步一步的来:要同时满足1.2的要求,而且输入数据 m >= n + 3,那么也就是说,我们总是能轻松的先构造一个n个点n

2013-11-17 10:18:49 3982 4

原创 Codeforces 362E Petya and Pipes (费用流)

n个点的网络,可以增加某些弧的容量,最大增加量为K,求增加后的最大流。要求增大K容量后的最大流,那如果把增加的流量加上费用呢?那题目也就是说,当费用为K的时候,最大流是多少。。。。把每条边拆成两条边跟,然后求s-t费用流,在费用等于K的时候终止费用流就行了。#include#include#include#include#include#define REP(i, n) fo

2013-11-15 15:36:39 1773

原创 UVALive 2197 Paint the Roads(费用流)

n个点m条边的带权有向图,现在要将某些边涂上颜色,使得每个点恰好在k个有颜色的环上。每个点都在k各环中,说明每个点的 入度=出度=k。 用费用流搞,增加源汇点s ,t,将每个点拆成两个点,u跟u+n,一个代表出度,一个代表入度。从s向每个u连的边,从每个u+n向t连的边,分别代表入度跟出度的上限。 然后对于原图中的有向边, 从u向v+n连一条的边。这样求s->t的最小费用最大流。如果能漫流,答

2013-11-14 11:11:30 1401

原创 UVA 11613 Acme Corporation(不固定流量的最小费用流)

题意好长。。。。变量好多。。。。增加源点跟汇点。然后将每个月份看成一个点,然后拆成两个点u 跟 u+n。 从s向每个u连一条的弧,表示最多生产量及价值。从每个u+n向t连一条的弧,表示最多销量及价值。对于存放的情况 for(int j=0; j的弧,表示存放所要花费的价值。这题并不需要满足销量最大,也就是不固定流量的最小费用流,也就是说当s-t增广长度大于0的时候停止增广就行了

2013-11-13 23:02:34 2061

原创 UVA 12655 Trucks(MST + LCA)

n个点m条边的带权无向图,S个询问,每次询问L->H的所有路径中,最小边最大的那条路径的最小边。只要能发现,最优路径必然是kruskal求得的最大生成树上就一切都好办了。求出MST,然后在线LCA搞就行了。#include#include#include#include#include#include#include#include#include#include#de

2013-11-13 20:52:19 1512

原创 hdu 4494 Teamwork(费用流)

最开始我是想的,把每个点拆成m个点,然后用一次费用流搞,对于那些可以重复利用的工人,添加一些cost为-1的弧。很逼真把,Why wa。。。其实每个兵种是相互独立的,那么就可以对于每个兵种,分别搞一次费用流,最后累加ans。这样代码就好撸很多了呢。。。费用流建图:显然每个点要拆成两个点,一个入(从s向其连的弧,简称x点),一个出(从该点向t连的弧,简称y点)。那么对于i,j两个点,如果en

2013-11-12 17:04:56 1572

原创 SGU 548 Dragons and Princesses(贪心)

坑爹:误以为王子可以marry中间任意一个princess,觉得不可搞,然后问了Lee,觉得优先队列也不好搞。。。反思:问了wintowanti,发现看错题了。。。其实只能marry最后一个princess。。。这样的话,用优先队列贪心就行了,每碰到一个di,将gi加入队列,每碰到一个pi,强制维护队列size #include#include#include#inclu

2013-11-11 22:50:32 1165

原创 UVA 12664 Interesting Calculator(spfa)

要你将x变换成y,一共有3×9中变换方法,每种变换有其对应的花费,然后求x-->y的最小花费,当最小花费不唯一时,求最小变换次数的解。类似于双调路径的题,用spfa进行状态转移就行了。不过类似于 ×1, +0这种变换是没有意义的,不用加入队列中了。#include#include#include#include#include#include#define REP(i, n

2013-11-07 18:57:01 1281

原创 UVA 12661 Funny Car Racing(最短路)

n个点m条边的有向图,求s->t 的最短路。其中每条边不仅有一个边权,还有对应的一个a, b值。从你出发开始,该边将开放a的时间,然后关闭b的时间,然后开。。关。。。几乎就是裸的最短路了,就是松弛的时候有两种松弛方法,一种是走到点u的时候,能直接走到v;另一种是时间不够,需要等“一段”时间,然后再走到v。#include#include#include#include#incl

2013-11-07 18:39:35 1794

原创 ZOJ 2318 Get Out!(计算几何+spfa好题!)

你是一个圆,然后平面还有n个圆,问你能否通过移动自己,突出重围!再抽象一点,就是判断一个圆,是否在其他若干个彼此相连的圆的“大圈圈”内。。。这里不得不强烈推荐watashi大神的神思路。。。神奇地将此题转化成图论模型!个人的理解是,如果某两个圆相交或相切,那么他们组成的封闭区间可以用连接其两圆心的线段表示,这样能得到若干线段,这样就成了,若干线段中,是否能组成一个多边形,使得起始圆心在多边

2013-10-31 21:29:00 1518

原创 URAL 1752 Tree 2(树的直径+RMQ)

给出n个点的一棵树,边权都是1.然后q个询问,每次询问距离vi节点di的节点是什么,输出任意一个就行。最开始yy到了找出树的直径,每个点能走的最长路的终点必然是直径的某个端点。然后把直径上的点存起来,然后对于询问vi不是直径上的点的时候dfs搞,妥妥儿的TLE了。。。后面gxb搞出来了,用二维fa数组记录每个点到直径两个断点的路径。由于边权都是1,所以查询的时候可以用RMQ。。。学习了。。

2013-10-29 12:16:03 1305

原创 hdu 3681 Prison Break(dp || dfs)

15Y。。。不过离当时的 hdu4766 21Y还有一段距离。。。刚开始拿到这题就bfs TLE了一发。。。然后发现图中那些空地是可有可无的,于是可以把图中所有F G Y抽象出来建图,然后bfs。这个思路基本正解了吧?于是就wa了一整晚。。。拉着ljy yy了一晚上,总觉得bfs是可以转移所有状态的。。。但是就是wa到死。。。然后就发现了网上的人都是用dp来完成状态转移的。。为什么bf

2013-10-22 13:54:32 1165

原创 SGU 532 Building Foundation(枚举)

给出n条与x轴或y轴平行的线段,然后求这些线段能组成多少个矩形。上来就n^4先枚举了一发,果断TLE了。。。然后反思:由于n条线段与x轴或y轴平行,所以组成的矩形一定是两条于x轴平行,两条与y轴平行的。这样的话,我们先n^2枚举所有两条y值不相等的与x轴平行的线段,然后就会发现能与这两条线段都有交点的平行于y轴的线段的x跟y都会有一个范围,然后在O(n)枚举所有与y轴平行的线段,求和就行了

2013-10-21 12:18:26 1138

原创 SGU 536 Berland Chess(状态压缩 + bfs)

在一个n*m的棋盘上,你有一个white king,然后还有一些(黑子的个数很少,所以用状态压缩来表示棋盘上还剩余哪些黑子。在bfs前先要初始化所有黑子状态下的受攻击的点,这个很恶心。。。初始化完了基本就是无脑搜了吧?#include#include#include#include#include#include#include#include#include#inc

2013-10-21 12:11:48 1067

原创 URAL 1980 Road to Investor(二分+最短路)

n个点m条边的无向图,每条路有固定的长度,然后有一个速度上限。要求在T时间内能从1到达n,最少超速多少?显然是二分答案然后求最短路。不过当二分枚举的超速很大而某条边的距离很小的时候,经过这条边的时间是会很小很小的,所以要将所有的时间单位扩大1e9倍,才不会丢失精度。。。#include#include#include#include#include#include#incl

2013-10-19 20:05:22 1188

原创 hdu 4490 Mad Veterinarian(bfs)

有三种物品,每个物品可以变换成一个或多个其他物品。这种变换关系是可逆的。然后求从初始状态转换到目标状态所需的最少步数。直接bfs就能搞了,记录状态的话小hash一发话就行了。#include#include#include#include#include#include#include#include#include#include#include#include

2013-10-18 23:37:44 971

原创 hdu 4491 Windmill Animation(几何+模拟)

给定平面上的n(n考虑到n很小,可以模拟来搞。每次得到一个原点及斜率,然后构造出在直线上原点(O)的上方(rp)和下方(rn)两个点。然后依次每个不在该直线上的点,如果该点在直线上方,那么要达到该点逆时针旋转的角度为向量 rp->O 和向量 p->O的夹角。反之则是向量rn->O和向量p->O的夹角。#include#include#include#include#includ

2013-10-18 16:44:27 1068

原创 Codeforces 131D Subway(找图上唯一环)

给定一个n个点n条边存在唯一环的联通图,求每个点到环的距离。找唯一环的话,用类似拓扑排序的方法,由于环上点的度>=2,所以bfs后未能遍历的点必在环上,然后就用dfs跟新距离就行了。#include#include#include#include#include#include#include#include#include#include#include#inc

2013-10-17 00:27:49 1501

原创 Codeforces 116C - Party(dfs)

n个人,每个人之多有一个上司。“上司”关系具有传递性。求最少将人分成多少组,每组中的每个人的上司或者间接上司都不在该组。拿到题就用树的直径wa了一炮。。。正解是有向无环森林的最长路。从每个跟节点dfs,找最长的路就行了。#include#include#include#include#include#include#include#include#include#in

2013-10-16 22:55:41 1274

原创 SPOJ AMR12A The Black Riders(二分+二分匹配)

有n个人,m个洞。每个洞能容纳一个人,每个人到每个洞需要花费一些时间。每个人到达一个洞后可以花C的时间来挖洞,这样该洞的容量就变成2了。求能使至少K个人进洞的最短时间。还是将求极值问题转化为判定问题。二分枚举时间,能否在time的时间内让至少K个人进洞?求进洞人数当然用二分匹配做。g[i][j]为第i个人到第j个洞的时间。如果g[i][j] #include#include#inc

2013-10-16 17:57:32 1086

原创 SPOJ AMR12C Entmoot(二分+圆的面积交)

题意是有n个人,每个人有各自坐标以及速度,求一个点X,使得所有点走到X点,耗时最大的那个人的耗时最小。输出这个时间。抽象成圆的面积交: 二分枚举时间将求极值问题转换为判定问题。如何判断是否存在一个点X,使得所有点都能在time时间内到达X? 每个人在time时间内的运动范围是以其初始座标为圆心,半径 v*time的一个圆。那么问题就很直观了,只要由time生成的这n个圆存在交,那么所有人就能在

2013-10-16 17:50:46 1454 1

原创 Codeforces 278C Learning Languages(并查集)

题意抽象出来就是求联通块的个数吧,然后添加最少边使图联通。注意所有人都不会任何语言的时候,答案是n而不是n-1。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define FF(i

2013-10-15 00:37:30 1471

原创 Codeforces 350B Resort(bfs)

感觉是不是很久没做水题了,最近开始各种坑,不论是训练还是CF。。。加之要去长春赛区,感觉中大出题有点偏向CF风格?所以最近打算把CF上tags 带graphs的都做做吧。这个题挺水的,直接根据题意,枚举起点然后bfs找最长路就行了。讽刺的是,当时做这场DIV2的时候题都没看懂。。。#include#include#include#include#include#inclu

2013-10-14 23:52:07 1407

原创 hdu 3722 Card Game (km)

感觉题中这句“Jimmy wants to stick them into several circles, and each card belongs to one circle exactly.”就是吓唬人的,事实上任意两个字符串都能形成环(并不需要一定有公共前缀, 若没有,score为0)。那这样就成了一个裸的KM了。。。#include#include#include#inc

2013-10-10 13:00:28 1071

原创 三维计算几何模板整理

/***********基础*************/struct Point3 { double x, y, z; Point3(double x=0, double y=0, double z=0):x(x),y(y),z(z) { }};typedef Point3 Vector3;Vector3 operator + (const Vector3& A

2013-10-08 14:13:34 1422

原创 二维计算几何模板整

/***********三分法求函数极值*************/void solve(){ double L, R, m, mm, mv, mmv; while (L + eps < R) { m = (L + R) / 2; mm = (m + R) / 2; mv = calc(m);

2013-10-06 18:55:41 1216

原创 hdu Disney's FastPass(状态压缩dp)

这种题我一直喜欢用bfs搞的,但是这个题不太好bfs,主要是我刚开始想的是通过边进行状态转移,这样很不好写。。。于是就坑爹了,调了很久sample都没出。。。于是学习了一下别人的思想。。。通过“目的”来进行状态转移而不是边。当你在某个点的时候,你可以为了游历某个景点去某个点,也可以为了获取某个点的票而去某个点。能想到这一点的话状态转移方程就很好写了,但是也要能想到啊。。。ps:注意代码中的

2013-10-03 17:09:46 915

原创 hdu 4115 Eliminate the Conflict (3-sat ??? no! it's a 2-sat pro.)

坑爹:看到各种冲突,当然第一反映是2-sat,但是这有三种情况啊,貌似不能满足布尔型约束吧。。。gg吧, 没法做。。。反思:传统2-sat是,i拆为两个节点,为真对应i节点,为假对应i+n节点。这个题有三种不同的bool变量可以将每个点拆成6个点。石头:i*6+0 | i*6+1;剪刀:i*6+2 | i*6+3;布: i*6+4 | i*6+5.这样就能轻松解决各种约

2013-10-02 13:36:45 1085

原创 hdu 4273 Rescue(三维凸包重心)

裸的三维凸包重心到表面的最近距离。#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define FF(i, a, b) for(int i=a; i<b; i++)#define FD

2013-09-26 13:02:01 1117

原创 hdu 4445 Crazy Tank(枚举角度)

这题第一反映肯定是三分角度,然后求最大值。。但是有友方坦克的存在,如果一个角度会导致某个导弹打到友方坦克,那么返回结果直接是0。所以只能萎缩地枚举角度了。。。。e中保存地方坦克的区间,f中保存友方坦克的区间。#include#include#include#include#include#include#include#include#include#include

2013-09-25 22:31:39 978

原创 图论算法模板整理

//无向图的双连通分量int pre[maxn], iscut[maxn], bccno[maxn], dfs_clock, bcc_cnt; // 割顶的bccno无意义struct Edge { int u, v; };vector G[maxn], bcc[maxn];stack S;int dfs(int u, int fa) { int lowu = pre[u] =

2013-09-25 11:30:18 1778

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除