自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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

转载 hdu(4435)天津现场赛

题意:给定每个点在平面内的坐标,要求选出一些点,在这些点建立加油站,使得总花费最少(1号点必须建立加油站)。在i点建立加油站需要花费2^i。建立加油站要求能使得汽车从1点开始走遍全图所有的点并回到1点,途中汽车加油次数不限,每个加油站的使用次数不限,但是汽车油箱有上限d(加满油可以跑距离d)。分析:突破口在于在i号点建立加油站的费用为2^i,这样特殊的花费会使得我们有一个贪心的规律,就是尽量不

2012-10-27 22:22:16 1074

原创 cf(tarjan运用+链表)

/*给你有向图,有些边是可以直接走的,有些边是修之后才可以走,现在要想从1能到达所有的点,问你至少要修多少条路。解:现把 可以直接 走的边加进来,缩点,因为(1<n,m<1e6)。 然后从1点bfs,每个点初始都为0,可以直接的标记为-1,要修的边标记为边的编号,当再有不修路就能到达的话又把它标记为-1,。 所以,如果路全部修之后好不能到达,则有些点还为0。

2012-10-27 13:29:09 564

原创 hdu 1007(分治法求最近点对)

// 分治算法求最近点对#include#include#includeusing namespace std;struct point{ double x , y;}p[100005];int a[100005]; //保存筛选的坐标点的索引int cmpx(const point &a , const point &b){ return a.x < b

2012-10-26 00:40:14 718

原创 BNU

题意:给出一个数序列,求符合要求的种数,条件是:新的序列前i个之和>=0,(1题解:预处理。#include #include #include #include #include #include #include #include #include #include #define MAXN 1111111#define MAXM 40000

2012-10-24 16:18:28 439

原创 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

原创 hdu4027(线段树的lazy操作)

刚开始的时候第一反应这道题是成段的更新,不能一个数一个数的更新,那样肯定会超时的!但是再想了一会儿之后,发现成段更新比较困难,主要是这道题的每个节点的更新并不是统一的(也就是说并不是都加K,或者都减K之类的);所以我们并不能像一般的成段更新那样去更新。再仔细观察后,其实我们可以很容易的发现,一个数k(k也就是说当一个数为1的时候,我们没有必要对它进行操作和更新;而且一个很大的数仅仅

2012-10-21 20:52:50 2304

原创 hdu 3954(线段树的特殊lazy操作)

发现最巧妙的就是定义了最小升级系数dis,因为这个变量相当有用,但是又不容易想到(看来思维真的很重要)。。。dis变量的定义,很好的将lazy结合起来了。就用简单的加减就很直观的转换。。那么在有了这个变量之后,我们也就可以像一般线段树那样操作了。。若当前lazy标记要更新,则传递给子树。。并把自己的lazy标记清空。。若当前最大经验值大于升级的所需经验时就开始往下更新,直到不能更新

2012-10-21 15:14:02 1793

原创 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

转载 ZOJ 3665 Yukari's Birthday (2012长春现场赛K题)

#include #include #include #include #include #include #include #include using namespace std;#define LL long longLL X = 1000000000000ll;struct nod{ int r,k;} re[12000];in

2012-10-15 11:36:36 1799

原创 2012年ACM长春现场赛B题 2-sat

大致题意:给出下面一段代码很明显这段代码是用a[n]数组来计算出b[n][n]。void calculate(int a[N], int b[N][N]) { for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { if (i == j) b[i][j] = 0; else if (i

2012-10-15 11:19:02 2027

原创 hdu 3938(离线的并查集)

题意描述:简单的讲就是,给你一张无向图,求有多少条路径使得路径上的花费小于L,这里路径上的花费是这样规定的,a、b两点之间的多条路径中的最长的边最小值!分析:因为考虑到数据的大小所以需采用离线算法先计算出结果后在统一输出结果!这里首先要从a到b的所有路径中筛选出这样一条路径(路径中的最长边是所有路径中最小),那么这就需要采用最小生成树kruskal的思想,那么任意两个集合A,B之间可以形成的路

2012-10-13 13:37:53 2372

原创 矩形面积的并(交)

#include #include #include #include #include #define MAXN 22222#define MAXM 5555#define INF 100000007#define lch(x) x<<1#define rch(x) x<<1|1#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1

2012-10-12 22:44:16 1219

原创 KMP

#include #include #include using namespace std;const int N=10000;char str[N];char sub[N];int next[N];int len;void getnext(){    len=strlen(sub);    next[0]=-1;    int i,j=-1;

2012-10-12 09:16:14 461

原创 bnu 12870(离散图的floyd)

将塔的高度离散化。#include#include#include#include#include#include#includeusing namespace std;const int N=630;const int inf=599999999;int n,f,m,q;int dis[N][N];map,int>myh;vectore

2012-10-06 12:12:00 474

空空如也

空空如也

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

TA关注的人

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