• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
AC_Artist.zig_zag
然而我依然在补题、
博客园    首页    新随笔    联系   管理    订阅  订阅
2013年3月28日
bzoj 1486 最小圈
摘要: 分数规划,搜索参数P,把边权调整成val-p,然后找负环,如果存在负环说明答案可行并且还存在更优解,搜到精度满足即可。minhoop 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #define maxn 10000 7 #define maxm 50000 8 using namespace std; 9 struct et10 {11 int s,t,next;12 doub 阅读全文
posted @ 2013-03-28 23:05 Zig_zag 阅读(250) 评论(0) 推荐(0)
Poj 2728 DK
摘要: 最优比率生成树,参数搜索。建议去这里http://wenku.baidu.com/view/87ecda38376baf1ffc4fad25.html看看。我写的二分比较奇葩,精度调起来比较疼,弄到1e-6就ok了。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 #define maxn 1024 7 #define inf 2147483646 8 using 阅读全文
posted @ 2013-03-28 23:02 Zig_zag 阅读(222) 评论(0) 推荐(0)
bzoj 2809 dispatching
摘要: 一开始没想出来,想大概需要维护一下工资单调递增然后求和什么的,后来一查发现是splay启发式合并,于是我赶紧先去做了一下Neverland那个题,发下什么启发式合并其实就是暴力合并......表示无奈。这个题居然这么轻松就写过了,而且还是1A,代码居然比Neverland还短......就是维护一下sum工资和就行了,查找的话类比寻找第k小的数。dispatching 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #inclu 阅读全文
posted @ 2013-03-28 22:55 Zig_zag 阅读(229) 评论(0) 推荐(0)
bzoj 2733 永无岛
摘要: 裸的splay启发式合并,其实就是用队列实现的暴力合并,轻松写过~Neverland 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #define maxn 200000 7 using namespace std; 8 9 int c[maxn][2]; 10 int fa[maxn],f[maxn],rank[maxn],size[maxn],q[maxn]; 11 int 阅读全文
posted @ 2013-03-28 22:52 Zig_zag 阅读(218) 评论(0) 推荐(0)
bzoj 2209 括号匹配
摘要: 我们把左右括号用-1和1来替代,那么两个不同的括号可以相互抵消,但必须保证是闭合的"()",而不是扩散的")(",这样我们维护一下左右的最小最大值,那么最小值就是孤单左括号的,最大值就是孤单右括号的数目,答案就是(|左小|+右大)/2+(|左小|+右大)%2。注意取反和翻转的不同,需要用不同的方式来维护以上4个值。brackets 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #includ 阅读全文
posted @ 2013-03-28 22:51 Zig_zag 阅读(407) 评论(0) 推荐(0)
bzoj 1014 火星人
摘要: 比较字符串?不好处理?我们想到用哈希来比较。每个节点记录它包括它的子树所表示的字符串的哈希值,这样我们可以通过二分长度,旋转出区间来判定。对于哈希值我们不必取特定的模数,只要让它乘爆就行,int就是模数。过程想清楚了就很好写了。prefix 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 #define maxn 240000 7 #define inf 2147483647 8 阅读全文
posted @ 2013-03-28 22:46 Zig_zag 阅读(362) 评论(0) 推荐(0)
bzoj 1269 editor
摘要: 这个题和维修数列一比就简单了许多,只要把所谓的光标处理好就OK 了,就是字符串处理的时候比较麻烦,需要多调试一下。这个题不用回收空间了,不过插入的时候还是要递归建树再插入,这样可以防止树的深度过大导致不平衡使得splay效率变差。editor 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 #define maxn 2400000 7 #define inf 2147483646 阅读全文
posted @ 2013-03-28 22:42 Zig_zag 阅读(176) 评论(0) 推荐(0)
bzoj 1500 维修数列
摘要: Splay的BOSS级别的题目,几乎包含了所有区间维护的操作,对于想要提高代码熟练度的人来说这个题非常值得一写。首先我们要维护的域是:size,sum,la(左max),ra(右max),ma(整体max)更新的时候用这些域更新就行,注意下传的时候也要更新响应域值。对于那些恶心操作,我就挨个说一下吧:注:标准结构:区间右端点+1(R)为根,区间左端点-1(L)为根的左儿子,这样目标区间就是L的右儿子,这种形式以后都用"标准结构"代替。插入操作:先把需要插入的序列建成一个小平衡树(递归),转出标准结构,插到L的右儿子上就行了。删除操作:转出标准结构,把L的右儿子切下来就行了( 阅读全文
posted @ 2013-03-28 19:36 Zig_zag 阅读(1344) 评论(1) 推荐(2)
bzoj 1208 宠物收养所
摘要: 这个题也是单点维护,不管来的是人还是狗,只要num=0就插入,否则就删除,想清楚了就很好写。Pets 1 const 2 maxn=100000; 3 ms=1000000; 4 var 5 c:array[0..maxn,0..1]of longint; 6 size,fa,key:array[0..maxn]of longint; 7 i,n,a,b,tot,sum,num,now,ans,tmp,rot:longint; 8 procedure update(x:longint); 9 begin 10 size[x]:=... 阅读全文
posted @ 2013-03-28 19:19 Zig_zag 阅读(241) 评论(0) 推荐(0)
bzoj 1503 郁闷的出纳员
摘要: Splay练手题,真正做起来不那么简单,虽然是简单的单点维护,但是删除的时候会比较恶心(吐槽一下,我就是因为一上来用这个题splay练手,调了半天没调出来,气死我了)。友情提示:刚进公司就被开的不算在最后的答案里(这公司真冷酷......)Teller 1 const 2 maxn=300000; 3 var 4 c:array[0..maxn,0..1]of longint; 5 fa,size,key:array[0..maxn]of longint; 6 n,i,a,limit,now,num,tot,sum,rot,tmp:longint; 7 sign:char; 8... 阅读全文
posted @ 2013-03-28 19:17 Zig_zag 阅读(285) 评论(0) 推荐(0)
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3