自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 51Nod 1596 搬货物

思路:题目要求每次搬的货物的重量和必须是2的次方数,给出得数据也是2的次幂,显然,两个货物的重量和为2的次方数,当且仅当这两个货物的次幂相等,所以我们始终保持数组是升序的,当w[i]==w[i+1]时,去掉w[i],w[i+1]++后保留,否则去掉w[i],保留w[i+1],方案数+1。可以用优先队列优化。 但这题卡了输入,需要使用输入挂。。。。。。。#include <map>#include

2017-07-31 20:26:23 257

原创 POJ 1459 Power Network

(记录这题纯粹是因为输入格式很有趣 0.0) 题意:输入分别为m个点,a个发电站,b个用户,n条边;接下去是n条边的信息(u,v)cost,cost表示边(u,v)的最大流量;a个发电站的信息(u)cost,cost表示发电站u能提供的最大流量;b个用户的信息(v)cost,cost表示每个用户v能接受的最大流量。 思路:应为发电站有输出限制,用户也有接受限制,所以可以建立一个超级源点和一个超级

2017-07-21 16:27:31 212

原创 最大流算法(Ford-Fulkerson)

struct edge{ int to,cap,rev;//终点,容量,反向边};vector<edge>G[N];//图的邻接矩阵表示bool used[N];//dfs中用到的访问标记//向图中增加一条从s到t容量为cap的边void addedge(int u,int v,int w){ G[u].push_back((edge){v,w,G[v].size()}

2017-07-21 14:32:43 807

原创 二分图最大匹配算法

/*该模板不用建立超级源点和超级汇点,直接把二分图中对应的边连接即可*/int V;//顶点数vector<int> G[N];//图的邻接表表示int match[N];//所匹配的点顶点bool used[N];//dfs中用到的访问标志//向图中增加一条连接u和v的边void addedge(int u,int v){ G[u].push_back(v);

2017-07-20 16:49:11 546

原创 Floyd-Warshall算法求矩阵的传递闭包

有向图的传递闭包表示从邻接矩阵A出发,求的所有节点间的路径可达情况int vis[N][N];//邻接矩阵,vis[i][j]=1表示i到j可达;void warshall(int x,int y) //warshall算法实现过程;{ for(int i = 0; i <= N; i++) vis[x][i] += vis[y][i];}void slove()

2017-07-20 16:01:58 2003

原创 51NOD 1213 二维曼哈顿距离最小生成树

因为是二维平面图,所以点很多,如果全部点都连边,将有N*(N+1)/2条边,数组肯定存不下,所以要想办法减少边数。题目要求的是最小生成树的权值,又是曼哈顿距离,可以发现,对于平面上的某个点,以该点为原点建立直角坐标系,则我们只需要连接四个象限中每个象限离它最近的那个点即可,所以边的数量减少到4*N。 对于每个点,用树状数组维护每个象限离它的最近的那个点的权值就好了#include <map>#i

2017-07-19 18:21:12 346

原创 最小生成树算法

常用的最小生成树算法主要有两种,Prim算法和Kruskal算法。Prim算法的原理是从一个顶点出发,贪心地选取当前点集中权值最小的边,知道所有的点都加入该点集中,算法结束 Prim算法:int cost[N][N];//无向图,双向连边,cost[u][v]表示e=(u,v)的权值,不存在时为INF;点从(1,1)开始int mincost[N];//从集合x出发的变道每个顶点的最小权值bo

2017-07-19 12:32:10 791

原创 全图最小割(Stoer-Wagner算法)

全图最小割大致是来解决这样一类问题: 给定一个n个点m条边的无向图,每条边有一个最大流量,给定一个源点s,求以哪个点作为汇点可以使整个图的最大流最小。思路分两步(引用网上的普遍解析): 一:找到S - T的最小割Mincut,其中S 和 T为最后并入集合的两个点。 1,初始化数组vis 和 wage; 2,遍历所有不在集合且没有被合并的点,找到最大wage值的点Next,并记录Mincut、

2017-07-18 20:15:56 1044

原创 结构体优先队列自定义优先度

bool operator ()(int &a,int &b){ return a>b;//最小值优先 } bool operator ()(int &a,int &b){ return a<b;//最大值优先 } int x; bool operator < (const number1 &a) const {

2017-07-18 17:32:49 631

原创 XTU OJ Highway(树的直径)

树的直径是指树的最长简单路。 求法: 两遍DFS :先任选一个起点DFS找到最长路的终点,再从终点进行DFS,则第二次DFS找到的最长路即为树的直径; 原理: 设起点为u,第一次DFS找到的终点v一定是树的直径的一个端点 证明: 1) 如果u 是直径上的点,则v显然是直径的终点(因为如果v不是的话,则必定存在另一个点w使得u到w的距离更长,则于DFS找到了v矛盾) 2) 如果u不是

2017-07-18 15:14:39 373

原创 树状数组模板

从图中可以看到,树状数组中用的C[ ],每个点都有一定的管辖范围; 如C[1]=a[1]; C[2]=a[1]+a[2]; C[3]=a[3]; C[4]=a[1]+a[2]+a[3]+a[4];等等;基础模板:int lowbit(int x){ return x&(-x);}这个函数主要是用来求的是某个点管辖范围; 如果是x+=x&(-x);就是得到的改点的父节点的值;比如

2017-07-13 18:24:03 339

原创 Ignatius and the Princess III (母函数)

题目大意是给出一个数,求这个数能分解出来的加法算式的个数(加数顺序不分前后)母函数模板请看我的另一篇文章: http://blog.csdn.net/rcy_zhu/article/details/75041050这题的模板套得有点玄学,我是逐个参数试出来的,因为确实不知道怎么确定循环条件……………..#include<iostream>#include<cstdio>#include<cst

2017-07-12 21:12:26 1237

原创 Holding Bin-Laden Captive!(母函数)

题目大意是给出面值分别为1 2 5的硬币的数量,求用这些硬币不能搭配出来的总面值的方法数。母函数模板请看我的另一篇文章http://blog.csdn.net/rcy_zhu/article/details/75041050#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<string

2017-07-12 21:07:34 3478

原创 Square Coins (母函数)

题目大意为:有1,4,9,16……..289(17^2)共17中不同的硬币,问有几种方法组成所给的数字。母函数模板请看我的另一篇文章: http://blog.csdn.net/rcy_zhu/article/details/75041050在这题上,可以轻易得出价值数组v[i]为每种硬币的面值; 共17种,所以K=17; 因为每种硬币无限,所n2[i]数组省略; 每种硬币可取可不取,所以n

2017-07-12 21:03:03 3547

原创 母函数

母函数是一个很神奇的东西。 详细请看某位大牛的文章,模板挺好的 http://blog.csdn.net/xiaofei_it/article/details/17042651模板: K对应具体问题中物品的种类数。 P对应具体问题的最大指数(通常是问题的最大解) v[i]表示该乘积表达式第i个因子的权重,对应于具体问题的每个物品的价值或者权重。(有时v[i]可以省略) n1[i]表示该乘

2017-07-12 20:54:24 351

原创 区间第k大的数(主席树)

套主席树求区间第k小的数的模板,然后求区间[l,r]第k大的数就等于求区间[l,r]第r-l+1-k小的数(下标从1开始)区间第K小值问题 有n个数,多次询问一个区间[L,R]中第k小的值是多少。查询[1,n]中的第K小值 我们先对数据进行离散化,然后按值域建立线段树,线段树中维护某个值域中的元素个数。 在线段树的每个结点上用cnt记录这一个值域中的元素个数。 那么要寻找第K小值,从根结点开

2017-07-10 21:10:05 727

原创 判断一个数是否包含平方因子

int miu(int num){ int cnt1=0,cnt2=0; for(int i=2;i*i<=num;i++) { cnt2=0; if(num%i==0) { cnt1++;//质因子个数 while(num%i==0)//判断该因子出现的次数

2017-07-10 17:43:16 1910

原创 判断四点共面

四个点构造三个向量,形成一个行列式 若行列式的值为0,则共面;不为0,则不共面 #include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<string>using namespace std;struct Point{ int x,y,z;} p[5];int main()

2017-07-10 16:53:12 4884

原创 51Nod 旋转字符串

水题一道。 不难发现,一个字符串由对串旋转而来,其本身也是一个对串,所以直接判断给出的字符串是不是对串就好。 这里判断对串用到了KMP算法中的Next数组 (参考本人另一篇文章:http://blog.csdn.net/rcy_zhu/article/details/53105405) Next数组可以求出最大字符匹配数,所以只要截取给出字符串的一半求一遍Next数组就好。#include<

2017-07-10 16:00:36 308

空空如也

空空如也

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

TA关注的人

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