自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SSimpLe_Y的博客

人一我百,人十我万,然而我做不到。

  • 博客(183)
  • 收藏
  • 关注

原创 HDU 2444 The Accomodation of Students-二分图判断&二分匹配

给你学生的数量,再给他们之间的关系,两个认识的同学能分到一个宿舍,问你是否能把这些学生分为两个集合,一个集合里的任意两个学生都互相不认识,如果可以分为两个集合,再求出有多少对学生能分到一个宿舍。能不能分为两个集合,一个集合里的任意两个元素之间没有关系,很明显就是二分图,先判断是不是二分图,如果是二分图,再求出最大匹配数,就可以了。

2016-08-02 20:20:20 588

原创 POJ 2594 Treasure Exploration-有向图最小路径覆盖&Floyd

这题大意是给你有向图,让你求出最少几个机器人可以走完所有的点,不同的机器人可以走相同的点。如果机器人不能走相同的点,就直接求出最小路径覆盖就可以了,加上这个条件后,就要用Floyd求出所有能走的路径,再求最小路径覆盖。最小路径覆盖 = 顶点总数 - 二分匹配数#include#include#include#includeusing namespace std;con

2016-08-02 20:13:29 621

原创 HDU1045 Fire Net-二分匹配&缩点

这题的大意就是给你一个图,'X'代表墙,'.'代表空地,在空地上可以放置一个碉堡,每一行每一列只能放一个,除非它们中间有一个墙隔开,求最多能放多少个碉堡。这题的思路就是把没被墙隔开的同一行,同一列缩成一个点,这样求出的最大匹配数就是答案。#include#include#include#includeusing namespace std;const int ma

2016-08-02 20:05:25 564

原创 hdu5791

Problem DescriptionAlice gets two sequences A and B. A easy problem comes. How many pair of sequence A' and sequence B' are same. For example, {1,2} and {1,2} are same. {1,2,4} and {1,4,2} are not

2016-08-02 19:58:43 755

原创 POJ1265 Area

题目大意:给一个平面上的简单多边形,求边上的点,多边形内的点,多边形面积。解题思路:这个题用了很多知识点:1、以格子点为顶点的线段,覆盖的点的个数为GCD(dx,dy),其中,dxdy分别为线段横向占的点数和纵向占的点数。如果dx或dy为0,则覆盖的点数为dy或dx。2、Pick公式:平面上以格子点为顶点的简单多边形的面积=边上的点数/2+内部的点数+1。3

2016-08-02 19:42:37 327

原创 二分匹配-邻接表

过山车的题,二分匹配模板#include#include#include#includeusing namespace std;const int maxn = 1500;//!!!int match[maxn],book[maxn];vector e[maxn];int m,n;int dfs(int u){ int i; for(i=0;i<e[

2016-08-01 23:55:00 414

原创 状压DP

HDU1074,这题的大意是一个人需要完成他的作业,但是他的老师给他定了期限,每超过期限一天,就扣一分,问你如何安排做作业的顺序,才能使扣的分数最少,输出要扣的最小分数,并输出完成作业的顺序。(科目数目n如果把n个科目进行排序,那么复杂度就有n!,肯定爆炸。其实每一个状态对于一种科目,只有两种可能,一是这个状态下做这个科目,二是不做这个科目,就是1,0两种状态,这样,我们就可以利用二进

2016-07-24 21:36:20 483 1

原创 RMQ模板

#include#include#include#includeusing namespace std;int maxsum[1000000][30];int minsum[1000000][30];int a[1000000];int main(void){ int n,i,j; while(scanf("%d",&n)==1) {

2016-07-18 16:05:36 304

原创 背包三讲

V表示背包容量,v[i]表示物品价值,w[i]表示物品重量,c[i]表示某种物品的个数1、01背包for(i=0;i<n;i++)//表示物品总个数 for(j=V;j>=w[i];j--) dp[j] = max(dp[j],dp[j-v[i]] + w[i]);2、完全背包for(i=0;i<n;i++)//表示物品总个数 f

2016-07-02 16:28:21 1363

原创 BFS-记录路径

给出三个数A,B,C,A,B代表两个容器,问是否能通过以下几种操作,把A或B里的水变成C。FILL(i) 把i容器中倒满水,DROP(i) 把i容器中的水倒掉,POUR(i,j) 把i容器中的水倒到j中。如果能做到,输出需要的最小步数,并输出每一步的操作,如果不能输出impossible。#include#include#include#include#include

2016-06-24 22:20:23 527

原创 BFS-优先队列

第一次做到用优先队列做BFS,第一开始用队列做,发现答案不对,照着网上代码改了半天也还是不对,最后发现别人竟然用的是priority_queue,改了之后答案立马就对了,好神奇,涨了一波姿势。题目描述:输入:第一个数T,T组测试数据。两个数 n, m; ( 0接下来n行每行m 个字符。‘s’ 表示弟弟目前所在位置。‘# ’表示此处为一座山。为了节省体力,不从此处通行。

2016-06-15 22:10:42 713

原创 三个水杯-简单bfs

给你三个水杯的容量,只有第一杯里面装满水,其他两个水杯是空的,再输入三个目标值,问你是否能通过倒水达到这个目标,如果能,输入最少步数,如果不能,输出-1.这题其实就是一个简单的BFS,以前感觉太麻烦了,一直不想写,今天终于AC了它。最后提示一下,BFS还是加上标记比较好。#include#include#include#include#includeusing namespac

2016-06-12 21:58:05 469

原创 dfs遍历每一个节点

搜索真的是一个很好用的算法,但是一直都是很弱,代码写的也是很弱。在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。#include#include#include#includeusing namespace s

2016-06-12 21:03:36 1164

原创 二分匹配之最大点集

,给你一些边的关系,然后让你判断最大的点集数量是多少,就是用匈牙利匹配算出最大匹配数,然后用点的数量减去最大匹配数的二分之一,注意是二分之一——————————————————————hdu1068————————————————————#include#include#includeusing namespace std;const int maxn = 1500;int

2016-05-31 21:18:24 410

原创 一些有用的函数

输入挂,快速读入数据long long read(){ long long ans=0; char last=' ',ch=getchar(); while(ch'9')last=ch,ch=getchar(); while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar(); if(last=='-')ans=-ans; return

2016-05-27 21:13:07 301

转载 POJ题单

OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期:一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.

2016-05-25 19:15:52 685

原创 线段树--区间更新

按区间build树,就是为了说明一下向下更新。#include#include#includeusing namespace std;const int maxn = 100010;int sum[maxn*4];int add[maxn*4];void PushUp(int rt){ sum[rt] = sum[rt*2] + sum[rt*2+1];}void

2016-05-24 17:06:56 373

原创 线段树--单点更新

hdu 1166 敌兵布阵第一行一个整数T,表示有T组数据。 每组数据第一行一个正整数N(N接下来每行有一条命令,命令有4种形式: (1) Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30) (2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30); (3)Query i j ,i和j为正整数,i(4)End 表示结束,这条

2016-05-24 16:42:35 337

原创 map 的用法(待补充)

1. map最基本的构造函数;(前面是下标,后面是对应的值)map&lt;string ,int&gt;mapstring; map&lt;int,string &gt;mapint;map&lt;sring,char&gt;mapstring; map&lt; char ,string&gt;mapchar;map&lt;char,int&gt;mapchar; map&lt;int ,ch...

2016-05-23 20:43:08 333

原创 标题什么的都不重要了吧

在这个具有意义的一天,我开通了我的博客,在此之后,我会在这里记录我大学的ACM生涯,说不定这里就是见证一个菜鸡走上人生巅峰的地方。其实我觉得一篇博客要有很多字逼格才比较高,但是我实在是TMD编不下去了。

2016-05-22 10:03:57 376

原创 二分-浮点

/*论EPS的重要性。。。。。浮点类型二分的写法。。。。。-------------------------POJ3122-----------------------给出一堆PIZA 然后求每个人都能等体积的最大体积是多少要求每个人的PIZA都来自同一块PIZA二分一下体积 这题就卡一个二分浮点数的时候要注意EPS还有求一个块PIZA能分成多少块的时候要补充E

2016-05-22 09:45:30 478

原创 二分-0011

/*poj3273 Monthly Expense。给出一堆数值,然后要求把他们分成m块,求这m块中的最大值最小可以是多少二分一下价值,然后判断能否分成m块*/#include#include#include#includeusing namespace std;int a[100100];int l,r,n,m;bool judge(int x)

2016-05-22 09:44:41 296

原创 二分-1100

/* poj3258 River Hopscotch牛要到河对岸,在与河岸垂直的一条线上,河中有N块石头,给定河岸宽度L,以及每一块石头离牛所在河岸的距离,现在去掉M块石头,要求去掉M块石头后,剩下的石头之间以及石头与河岸的最小距离的最大值。二分一下距离然后判断的时候先跟岸边比较,注意是终点那个岸边。。。。起点不用比较。。。。。石头之间比较的时候是间隔不符合的时候拿

2016-05-22 09:41:34 296

空空如也

空空如也

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

TA关注的人

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