自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

LiuJunhao's Blog

An ex-OIer/CPCer's Blog

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

原创 【数论】[Uva12169]Disgruntled Judge

题目 分析:x2=(ax1+b)%MOD x3=(a(ax1+b)+b)%MOD=(a^2*x1+(a+1)+b)^MOD x3+MOD*k=a^2*x1+(a+1)b (a+1)b+MOD*k=x3-a^2*x1 枚举a,用exgcd求出b,再进行验证。 代码:#include<cstdio>#define MAXN 1

2015-08-30 16:55:39 443

原创 最小费用最大流

bool spfa(){ int u,v; memset(pre,0,sizeof pre); memset(dist,0x7f,sizeof dist); dist[S]=0; vis[S]=1; q.push(S); while(!q.empty()){ u=q.front(); q.pop();

2015-08-26 20:19:14 591

原创 最大流Sap模板

int dfs(int u,int augu){ int augv=0,v,delta,mind= n-1; if(u==T) return augu; for(v=S;v<=T;v++) if(cap[u][v]>0){ if(dist[u]==dist[v]+1){ delta=min

2015-08-26 20:18:46 411

原创 搜索技巧

1.最优性、可行性剪枝 2.估计搜索空间大小 3.选择合适搜索对象 4.选择搜索方向 5.控制搜索深度I.D,DFS,IDA* 6启发式(估值函数) 7.双向搜索:DFS:中间相遇(meet in the middle) BFS:双向BFS

2015-08-26 20:18:29 351

原创 【图论】【二分图匹配】[HDU2819]Swap

题目 分析:在对角线上全是1,逆向思考这个问题,将对角线上的1回到他们原来的地方后,发现这些1中没有任何两个在同一行或同一列,也就是这个图是一个置换矩形。 将每一行,每一列编号,分别作为x部和y部,将1所在的行列连边,求最大匹配。 至于输出方案,匹配完了之后,枚举每一行(或列,下同),将这一行的1置换到对角线上去即可。代码:#include<cs

2015-08-26 20:18:13 631

原创 【图论】【A*搜索】[POJ2449]Remmarguts' Date

题目 本题实质是求第k短的路径; SPFA+A* 进行启发式搜索直至访问终点k次, 估值函数:当前已经走的距离+当前点到终点的最短路 注意:当s==t时,要特判#include<cstdio>#include<queue>#include<cstring>#include<cstdlib>using namespace std;#define MAXN 1000#define

2015-08-26 20:17:18 346

原创 【图论】[二分图匹配] 模板

bool dfs(int u){ for(node *p=adj[u];p;p=p->next){ if(vis[p->v]) continue; vis[p->v]=1; if(!c[p->v]||dfs(c[p->v])){ c[u]=p->v; c[p->v]=u;

2015-08-26 20:16:48 423

原创 【图论】[ZOJ1054]Place the Robots

题目分析:二分图匹配,和ZOJ1052差不多,但是草地在计算连通块是当做空地,在连边是如果交点是草地则不连边。代码:#include<cstdio>#include<cstring>#define MAXN 50int n,a[MAXN+10][MAXN+10],cnt,cnt1,c[MAXN*MAXN*2+10],ans,T,m;char s[MAXN+10][MAXN+10];bool

2015-08-26 20:16:11 492

原创 【图论】[ZOJ1002]Fire Net

题目 二分图匹配,建图方式巧妙,横向连通块(在一行,中间没有障碍物)、纵向连通块分别为x,y部,相交的连边,求最大匹配。#include<cstdio>#include<cstring>#define MAXN 4int n,a[MAXN+10][MAXN+10],cnt,cnt1,c[MAXN*MAXN*2+10],ans;char s[MAXN+2][MAXN+2];bool vis

2015-08-26 20:15:11 437

原创 【图论】[CQBZOJ1362] 苗条的生成树

题目描述:点击此处 解题思路: 构造最小生成树,并计算苗条度,然后不断删最短边,构造最小生成树,计算苗条度,直至图不再连通,输出苗条度。 若一开始就不是一棵树,则输出-1;实现代码:#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#include<climits>#define MAXN

2015-08-26 20:14:36 836

原创 【搜索】[POJ3897]Maze Stretching

题目 分析:显然是搜索,bfs比较慢,那就用A*吧,但是并不能直接用A*求最短路,因为在你讲迷宫拉伸了之后,你一开始找的最短路并不一定最短(我是这么觉得,自己想想),所以就二分拉伸的比例,然后用A*进行Check。代码#include<cstdio>#include<queue>#include<cstdlib>#include<cstring>using namespace std;#

2015-08-26 20:13:45 439

原创 【搜索】[HDU1175]连连看

题目 分析:这道题看到的第一反应应该就是BFS或者DFS,裸的DFS、BFS显然会TLE,所以我就想用A*,不过好像并不好写启发函数。 枚举步数不行,就枚举边吧。因为允许有两次转折,所以最多有三条边枚举中间的一条边,然后进行check,这道题只用了两个for循环就AC了。代码:#include<cstdio>#include<queue>#include<algorithm>

2015-08-26 20:13:16 484

原创 【数论】【算术基本定理】[LightOJ1289]LCM from 1 to n

题目 分析:设L(n)为LCM(1,2,3……n),则有若n+1不是 质数的完全平方,则可将质因数分解成p1^a1*p2^a2*……pn^an,对于每个pi^ai,显然<n,且两两互质,所以p1^a1*p2^a2*……pn^an|L(n),所以n+1|L(n),L(n +1)=L(n)若n+1是质数的完全平方,则n+1=p^k,p^k不整除1….n,p^k不整除L(n),因为p^(k-1)|L(n

2015-08-26 20:12:26 738

原创 【数论】[CF258C]Little elephant and LCM

题目 分析:枚举最大数,然后找出它所有因数p1…….pk, 从中任意选取一些数,这些数的LCM|这个数且,这些数的最大LCM就是枚举的这个数,且若pi<=aj<=pi+1则前i个数可以放在j这个位置,即j这个位置有cj种选择,总方案数就是c1*c2*……*cj 作为优化,对于每个pi,我们枚举有aj满足pi<=aj<=pi+1的个数记为qi,则有ans=1^qi*2^qi*……*q^qk,但这些

2015-08-26 20:10:56 589

原创 【搜索】[NOIP2004]虫食算

题目 从各位开始按照字母出现的顺序枚举每个字母代表的值; 剪枝:1.搜索时每个数值只能由一个字母代表 2.搜索中如果发现有矛盾就回溯#include<cstdio>#define MAXN 26#include<cstdlib>#include<cstring>int a[MAXN+10],n,e[MAXN+10];char x[MAXN+10],y[MAXN+10]

2015-08-26 20:10:23 1344

原创 【NOIP2001】Car的旅行线路

题目描述:点击此处 解题思路: 平行四边形相对顶点的横坐标、纵坐标之和分别相等。 将所有机场的坐标都算出来之后,再根据题目描述连边,从出发地的四个机场或到达地的四个机场分别做单源点最短路。实现代码:#include<cstdio> #include<cstring>#include<cmath> #include<algorithm> #include<queue> #include

2015-08-26 20:09:48 523

原创 【图论】【最小生成树】[IOI2003]maintain

题目描述:点击此处 解题思路: 在加边的同时对边进行插入排序,当边的数量≥n-1时,进行kruskal,此时每次kruscal的复杂度为O(m),算法的时间复杂度为O(m^2)实现代码#include<cstdio>#include<cstring>#define INF 0x7f7f7f7f#define MAXN 200#define MAXM 6000#include<algor

2015-08-26 20:08:11 823

原创 [NOI2001]方程的解数

题目 DFS(meet in the middle) 通过此条件剪枝,由于本题数据较大,可通过HASH表存储方案数。#include<cstdio>#include<vector>#include<cmath>#include<cstdlib>using namespace std;#define MAXN 6#define MAXH 4999999struct node{

2015-08-26 20:06:54 698

空空如也

空空如也

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

TA关注的人

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