自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

mrkdian的专栏

自娱自乐

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

原创 Golang database/sql教程:(1)访问数据库

在Golang中使用数据库的基础方式是通过Golang的标准库database/sql,此库提供了关系型数据库的一般接口,需要第三方实现对应数据库的驱动,其角色类似JDBC。import ( "database/sql" _ "github.com/go-sql-driver/mysql")func main() { db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/hello") if err != nil

2020-12-26 22:53:25 316 1

原创 POJ 3279 搜索(反转)

这道题搜索的角度很有意思。比较直白的想就是每个瓷砖都可以反或不反,2种选择。这样的话,搜索的状态数时间太多,指数级增长,肯定T。不妨这么想。如果指定了第1横排的翻法。那么如果第1横排存在黑色,也就是(1,x)为黑。那么(2,x)就必须反转才能保证(1,x)为白,那么第2排的反转法也确定了。如此类推,如果至最后一排都为全白,那么这是一种可以通过的翻法。

2016-01-21 00:05:52 409

原创 POJ 2449 A*经典水题

先求每个点到目地T的最短距离。这一步可以将图的每条边反向,做单源最短路求得。然后就是在图上搜索。可以用优先队列来实现搜索状态的筛选。f=g+hg为搜索到此点已经走过的距离,h为此点到T的最短距离。当第K次搜到T,此时的g+h就是第K短路。#include#include#include#include#include#includeusing nam

2016-01-20 23:49:20 299

原创 POJ 3057 二分图最大匹配

比较难想的一道二分图。考虑这么建图。时间和门的二元组为二分图的x集合的元素,每个人为y集合的元素,连边就表示,这段时间内此门能让此人过。让时间从1开始递增,每次寻找x集合和y集合的最大匹配,当最大匹配等于人数时,此时间满足所有人都离开屋子。每次找最大匹配可以在上一个时间的残余图上寻找增广路,速度还是挺快的。#include#include#include#

2015-09-25 14:37:41 697

原创 POJ 2991 线段树区间更新

每个叶子节点保存每个线段的向量。那么答案就是线段树区间和。每次操作就是对向量进行旋转,线段树的区间更新加上向量旋转公式搞定。设有向量(x0,y0),逆时针旋转A度后的向量为(x1,y1),有x1=x0 * cos(A)- y0 * sin(A)y1=x0 * sin(A)+ y0 * cos(A)#include#include#include#inc

2015-08-27 12:57:59 276

原创 POJ 3061 简单二分

#include#include#include#includeusing namespace std;int N,A[500000];int sum[500000];int S;bool check(int x){ int SUM=sum[x]; for(int i=x+1;i<=N;i++) { SUM=max(SUM,sum[i]-

2015-08-06 11:50:34 311

原创 POJ 1061 扩展欧几里得算法解不定方程

贴一个题目地址吧:http://poj.org/problem?id=1061(下文对扩展欧几里得算法的论述基本取决于所打的代码模板,故不准确)抽象题意。设青蛙跳过的圈数为K,青蛙跳的次数为T。根据题意有X+MT ≡ Y+NT(mod L)==> LK+(N-M)*T=X-Y那么问题就变成求解上述方程的最小非负整数T解。方程中N-M和X-Y可能为负,K与T为

2015-08-03 11:54:26 395

原创 HDU 1712 分组背包

#include#include#include#includeusing namespace std;typedef long long ll;ll max(ll a,ll b,ll c){ ll d=max(b,c); d=max(a,d); return d;}ll W[200000],V[200000];int cnt=0;ll dp[10

2015-07-22 17:29:11 211

原创 hrbust 1494 tarjan算法求割点模版

#include#include#include#includeusing namespace std;struct arc{ int to,val; int next; arc(int a=-1,int b=0):to(a),val(b) {}};int head[150];arc edge[40000];int e_cnt=0;int low[1

2015-06-04 17:23:38 231

原创 HDU tarjan算法模版 强连通分量+最小路径覆盖

注意缩点之后,一个强连通分量内的点,不要在二分图拆点时连边。。#include#include#include#includeusing namespace std;struct arc{ int to,val; int next; arc(int a=-1,int b=0):to(a),val(b) {}};int head[5050];ar

2015-06-03 20:45:38 286

原创 HDU 3488 KM算法模版 多个环的并

KM算法学习的是某牛的代码:http://www.cnblogs.com/Lyush/archive/2013/04/16/3025145.html中间对slack的调整有个不懂的地方,但删去之后,还是能过,比源码慢了30ms左右。加速原理不懂..#include#include#includeusing namespace std;#define MAXN 3

2015-06-03 14:46:42 301

原创 POJ 2239 二分图最大匹配模版

基本算是裸的二分图匹配。#include#include#include#includeusing namespace std;int n;bool G[350][85];bool vis[85];int link[85];bool find(int u){ for(int i=1;i<=84;i++) { if(!vis[i]&&G[u

2015-06-03 14:41:36 311

原创 POJ 2253 floyd求最大边的最小值

给定n个节点的坐标,求1节点到2节点的通路的边的最大值的最小值。floyd可做,状态转移: if(G[i][j]>max(G[i][k],G[k][j]))  G[i][j]=max(G[i][k],G[k][j]);poj上的discuss简直是百家争鸣。可取的貌似还有二分+DFS   , 最小生成树求最大边。DIJ和其他最短路算法讲松弛操作改成上面的状态转移方程

2015-05-25 12:28:54 393

原创 POJ3259 Bellman-Ford算法 求负环

暴力bf...1954ms 差6ms卡过.#include#include#define INF 0x3f3f3f3fint n;int G[1000][1000];bool bf(){ int res[n+1]; memset(res,0x3f,sizeof(res)); res[1]=0; for(int k=1;k<=n-1;k++)

2015-05-25 10:07:39 386

原创 POJ 1125 多源点最短路floyd

用floyd求出图中每个点到其他点的最短路,再对每个点的最短路求和,最小的便是答案的起始点。#include#include#includeusing namespace std;#define INF 0x1f1f1f1fint W[105][105];int G[105][105];int n;void floyd(){ for(int k=1;k<=n;k++

2015-05-24 10:10:36 259

原创 POJ 2570 floyd(传递闭包+状态压缩)

把图中边的连通状态(一条边有几个公司公用)压缩成二进制。通过G[i][j]=G[i][j]|(G[i][k]&G[k][j]);  完成floyd的传递闭包,其实也就是状态转移。#include#includeint G[205][205];void floyd(int n){ for(int k=1;k<=n;k++) { for(int

2015-05-23 22:23:44 288

原创 POJ 1185 状压DP

#include#include#include#includeusing namespace std;int map[101];//int dp[101][(1int dp[101][70][70];int st[70];int num[(1inline int jcount(int x){   int cnt=0;   whi

2015-04-15 21:06:44 264

原创 HDU 2087 / POJ 3461 KMP拓展

#include#includeconst int maxn=1005;char str1[maxn],str2[maxn];int next[maxn];void getnext(char *str,int len){ next[1]=0; int k=0; for(int i=2;i<len+1;i++) { while(k>0&

2015-03-21 00:05:42 305

原创 hdu 1247 字典树模版

对于每个字符串,判断是否为hatword,可以先找此字符串不同的划分前缀,然后对每个前缀对应的后缀进行检查,是否满足题目条件。#include#includeconst int maxn=100000;int node[maxn][26];bool finish[maxn];int pos=0;void add(char *str){ int rt=0; fo

2015-03-19 20:09:40 357

原创 hrbust 1400 排序+求逆序

#include#include#includestruct POINAT{ int i; int val;};int cmp1(const void *a,const void *b){ if((*(POINAT *)a).i!=(*(POINAT *)b).i) return (*(POINAT *)a).i-(*(POINAT *)b)

2015-03-15 23:46:15 314

原创 hrbust 1161 树状数组模版

#include#includeint c[100001]={};int cool[100001]={};int n;int lowbit(int x){ return x&(-x);}void add(int i,int d){ while(i<=n) { c[i]+=d; i+=lowbit(i); }}

2015-03-15 23:44:17 388

原创 POJ 3264 RMQ模版

#include#include#include#include#includeusing namespace std;int MAX[50000][20];int MIN[50000][20];void RMQ(int n){ for(int j=1;j<=20;j++) { for(int i=0;i<n;i++) {

2015-03-15 23:41:18 263

原创 hrbust 1186 简单DP

递归的方法会超时。只有靠递推解决。递推:#include#includeint l,s,t,n;int DP[100010]={};int main(){ while(~scanf("%d%d%d%d",&l,&s,&t,&n)) { memset(DP,0,sizeof(DP)); for(int i=1;i<=n;i++)

2015-03-07 15:19:20 347

原创 ZOJ 3706

水题。注意3个数加减最多能构造13个不同的数字。当检测到能构造13个数时候直接break。#include#include//bool check(int *ans,int len,int x)//{// for(int i=0;i<len;i++)// {// if(ans[i]==x) return false;// }// r

2015-02-17 16:46:49 444

原创 ZOJ 3787

考察排序的模拟题#include#includestruct one_student{ int num; int h; int m; int s;};int cmp(const void *a,const void *b){ if((*(one_student *)a).h!=(*(one_student *)b).h) return (*

2015-02-17 14:05:41 309

原创 ZOJ 3702

题目原文的一个字都不要漏! t>=1 坑我半天#includeint main(){ long long a[30],b[30]; a[0]=1,a[1]=0; b[0]=0,b[1]=1; //printf("%lld %lld\n%lld %lld\n",a[0],b[0],a[1],b[1]); for(int i=2;i<=30;i+

2015-02-16 21:32:43 323

原创 HDU 1272

WA好多次,注意题目,多颗树算No。注意判断树数量的代码。以我目前的智商,暂时只能用这个拙劣的方法,判断集合的连通性,也就是节点是否只构成一棵树。#include#includeint node[100001];int tree=0;int son[100001];void init(){ for(int i=1;i<=100000;i++) n

2015-02-02 22:04:49 306

原创 HDU 3635

带权并查集。跟poj1182相比,权更新和偏移的方法要简单一些。#includestruct BALL{ int pre; int rel;}node[10001];int city[10001];void init(int n){ for(int i=1;i<=n;i++) { node[i].pre=i;

2015-02-01 15:10:18 307

原创 HDU 2614 DFS

深度优先搜索。注意ans数据量可能很大。#include#includeint T[20][20];int ans[20000],k=0;bool visit[20];void dfs(int n,int at,int cost,int finish){ visit[at]=1; ans[k++]=finish; for(int i=0;i<n;

2015-01-31 17:28:07 279

原创 HDU 1548 BFS

广度优先搜索。注意判断a==b的情况#include#includeint bfs(int* floor,int n,int a,int b){ int step[n+1]; int queue[500]; bool visit[n+1]; memset(visit,0,sizeof(visit)); memset(visit,0,sizeof

2015-01-30 21:06:18 343

原创 HDU 4004

二分可做。只要是能确定答案域的,且可通过验证函数缩小答案域的,基本上都可能可以用二分做。#include#includeint cmp(const void* a,const void* b){ return *(int*)a-*(int*)b;}bool check(int len,int n,int m,int* stone,int temp){

2015-01-30 18:54:17 441

原创 HDU 1711 KMP模版

kmp模版#includeint a[1000001],b[1000001],next[1000001];void getnext(int* a,int len){ next[1]=0; int k=0; for(int i=2;i<len+1;i++) { while(k>0&&a[k]!=a[i-1]) k=next[k];

2015-01-30 00:00:01 448

原创 HDU 1710

递归。主要思路:把先序序列的第一个数字当作一个根,在中序序列中寻找根,则中序序列中根前面的序列为根的左子树,后面的序列为右子树。则再通过先序序列就可以找到当前根的左右节点,递归,将树还原,再后序遍历即可。这套代码虽然一次性AC,但写的真的很累,太冗杂。引以为戒。#includestruct BTnode{ int data; BTnode* lc

2015-01-28 01:40:33 766

原创 POJ 1700

贪心,discuss中也有DP的做法。主要思路是每次循环中送最慢和倒数第二慢的去对岸。有2种送法,不同情况下,最快的送法不同。2种送法的核心思路是确保回来的时候是最快的人开船回来,送去对岸时,能尽量把2个最慢的捏一起送。#include#includeint cmp(const void *a,const void *b){ return *(int *)a-

2015-01-21 17:09:26 349

原创 HDU 4708

模拟+贪心主对角线和副对角线的和取最大值,只需每一圈数字的4个对角元的和取最大值,再将每一圈数组的对角元最大值相加即可。#includeint matrix[10][10];int tl,tr,bl,br;void move(bool kind,int n,int step,int x){ if(kind==1) { tl=matrix[x+ste

2015-01-18 20:52:55 246

原创 POJ 1182

带权并查集。注意权在并和查中偏移的方式,结合向量来理解。#includestruct one_node{ int pre; int rel;}node[50001];void init(int n){ for(int i=0;i<=n;i++) { node[i].pre=i; node[i].rel=0;

2015-01-18 12:04:34 247

原创 POJ 1086

可以把括号变成01序列,处理方便。注意题目要求n不超过20,意味这个序列里匹配好的括号不会超过10。时间要求有1000MS,十分充裕,不需要高效的算法。直接模拟即可。此类题注意不要过度复杂化。#includebool str[1000];int k=0;void add(int x){ for(int i=1;i<=x;i++) str[k++]=0;

2015-01-18 11:42:03 381

空空如也

空空如也

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

TA关注的人

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