寒假总结

寒假刷水记录……


bzoj1901: Zju2112 Dynamic Rankings

水题……暴力即可

http://ideone.com/nnjLb


bzoj1207: [HNOI2004]打鼹鼠

DP,我一开始想的状态表示有3维,时间,x,y……然后发现完全没有必要,太稀疏了

用f[i]表示第i只老鼠的时刻即可,因为第i只老鼠的时候机器人要么空降,要么从别的老鼠那里转移

转移的时候判一下是否合法即可

http://ideone.com/Opul8


bzoj2407: 探险

2011湖南省队集训题,这道题比较巧妙

枚举每个从st出发的点u,st和u相连的边记作i,然后从这些点做SPFA

维护最短路和次短路

u存在两条路,一条最短一条次短

如果i这条边直接是最短路,那么取cost[i]和次短路更新答案

否则取cost[i]和最短路更新答案

http://ideone.com/hEeaT


bzoj2405: 数字

官方题解给的是22680以前暴力,然后22680+i和i的结果是一样的……

至于为什么是22680……我不知道

http://ideone.com/9eYw6


bzoj1116: [POI2008]CLO

满足题目要求要有个条件

任意联通分量边集>=点集

DFS即可

http://ideone.com/2hu1e


bzoj1412: [ZJOI2009]狼和羊的故事

最小割……

将st与每个狼的领地连流量为oo的边,每个羊的领地向ed连流量为oo的边

每块地向四周的地连1的边

我们要做的是将羊与狼分隔开,实际上就是求一个最小割//不可能割到st与狼,羊与ed相连的边

http://ideone.com/AiIPD


bzoj1115: [POI2009]石子游戏Kam

通过这道题知道了什么叫阶梯nim……

那么将这道题转化为阶梯nim

石子实际上就是a[i]-a[i-1]

然后不断将石子往上放

阶梯nim异或的是奇数层的石子数,最后为0则输,反之则赢

http://ideone.com/WU6Sa


bzoj1878: [SDOI2009]HH的项链

这道题我一开始怎么想也想不出来,Orz clj的blog后发现他说只能离线做

我不知道为什么只能离线做……但我一开始一直在想在线……

这道题要保证不算重

所以碰到一个贝壳以后,将(上次这种贝壳出现的点+1)到(当前点)的答案+1

树状数组可以搞定

将区间按右端点排序以后

一路扫过来即可出解

http://ideone.com/5HnDw


bzoj1066: [SCOI2007]蜥蜴

石柱跳多少次的限制很像流量限制……

将每个石柱拆成点1,点2连边,流量为限制次数

若石柱上有蜥蜴,从st向点1连边

若石柱可以跳出去,从点2向ed连边

若这个石柱可以跳到另外的石柱,从这个石柱的点2向另一个石柱的点1连边

http://ideone.com/x7X0e


bzoj1499: [NOI2005]瑰丽华尔兹

DP的时候每个方向更新的时候都是单调的,使用单调队列……

http://ideone.com/xo0sF


bzoj1342: [Baltic2007]Sound静音问题

平衡树秒杀……STL就是爽

http://ideone.com/mw7gK


bzoj1103: [POI2007]大都市meg

这个题很厉害啊……我提一次知道DFS序列

嗯……一个中序遍历的DFS序列,如果将进栈出栈的位置记录一些信息的话

可以表示一个点到根的一些信息

比如这道题,一个DFS序列,进栈+1,出栈-1

那么询问就是问这个点进栈位置的前缀和-1(减去根)

修改就是将进栈出栈都置为0,用树状数组维护即可

http://ideone.com/xwWcx


bzoj2456: mode

水题不解释……


bzoj1307: 玩具

从左扫一遍,每个点为右端点向左延展最远是多少

同理从右扫一遍

然后更新答案……

http://ideone.com/k558c


bzoj1968: [Ahoi2005]COMMON 约数研究

考虑每个数对总体的贡献……

然后瞬间变水题,三句话搞定……

http://ideone.com/QBl1w


bzoj1070: [SCOI2007]修车

这道题是费用流……

将每个技术人员拆成n个点,每辆车向着n个点连边

表示这辆车在这个技术人员手上是第倒数多少个修的

费用为维修时间加上他等待的时间

这个费用对于每个点单调递增,因此费用流可做……

但是我莫名其妙的wa了……

所以就不贴代码了


bzoj1257: [CQOI2007]余数之和sum

嗯……对于一段数来说,mod的余数是相同的

那么可以一起做,clj说可以证明不超过sqrt(n),不知道谁证明……怎么证明

http://ideone.com/TKfox


bzoj[Ahoi2009]fly 飞行棋

暴力即可……

http://ideone.com/vAeTM


bzoj1452: [JSOI2009]Count

注意到c较小,于是傻×树状数组……

http://ideone.com/S6C43


bzoj1106: [POI2007]立方体大作战tet

如果两个相同的数之间有n个数,那么肯定要经过n次交换……

然后用树状数组统计一下即可,碰到第一个数+1,碰到第二个数统计,然后-1……

http://ideone.com/lAs4K


bzoj1858: [Scoi2010]序列操作

恶心线段树……

我一开始写了个splay……wa了

发现splay代码很长毫无优势……

然后写了个zkw线段树……wa了

发现跟splay代码长度一样……200行……

然后Orz了clj……将状态用struct表示,还重载了+运算符……写的相当优美……

嗯……学到了

http://ideone.com/eSWzh


bzoj1621: [Usaco2008 Open]Roads Around The Farm

暴力水题……


bzoj1934: [Shoi2007]Vote 善意的投票

最小割……

所有同意的连st,不同意的连ed

好朋友之间连边

那么答案就是一个最小割……

http://ideone.com/RdjQT


bzoj1996: [Hnoi2010]chorus 合唱队

O(n^2)DP

f[i][j][0...1]分别表示i到j这一段,最后一个是从前面和后面进来的方案数

http://ideone.com/zVdEn


bzoj1563: [NOI2009]诗人小G

跟装箱玩具很像……1D/1D决策单调优化的DP

不知为何wa了……


bzoj1177: [Apio2009]Oil

有两种做法

枚举分割线,有六种情况

然后从左上角开始DP

具体做法请见http://oi.imzzl.com/2010/05/373.html

http://ideone.com/YH5vn


bzoj2303: [Apio2011]方格染色

首先能够发现,如果确定一行一列……那么整个棋盘就确定了

进一步观察,某个格子的颜色仅取决于这个格子所在的首行和首列和第一个格子对应的颜色

默认第一个格子是0,如果第一个格子是1,将输入取反

如果这个格子是0,那么首行和首列异或值为1

然后用并查集像食物链那样维护即可

//数据太弱了……我一开始并查集写错,相当于直接输出2^(n+m-1-k),有70分……


bzoj1475: 方格取数

二分图的最大点权独立集……

=点权和-MaxFlow

先将棋盘黑白染色……黑点向白点连边,流量为oo

st向黑点连边,流量为点权,白点向ed连边,流量为点权

http://ideone.com/cA2Ja


bzoj1083: [SCOI2005]繁忙的都市

一开始想二分……后面一看尼玛根本不用二分……

排序并查集……

http://ideone.com/nNLzP


bzoj1305: [CQOI2009]dance跳舞

拆点网络流……

每个孩子拆成3个点,总,like,dislike

st向男总连n,男总向like连n,向dislike连k

女生同样

然后like连like,dislike连dislike

http://ideone.com/LE084


bzoj1093: [ZJOI2007]最大半连通子图

首先一个联通分量里的点是可以满足要求的

所以先将强连通分量缩点,然后变成了一个拓扑图

然后拓扑DP即可……//再次Orz clj的toposort写法……

http://ideone.com/d95DH


bzoj1797: [Ahoi2009]Mincut 最小割

对原图做一遍网络流……然后在残量网络中做强连通缩点

对于一条边,如果他的两个点分属不同的连通分量且满流则这条边可属于网络的最小割……

如果他的两个点分属不同的联通分量且满流且两个点分别和st,ed属于同一个连通分量,则这条边必属于最小割

详细的解释见http://hi.baidu.com/acybl/blog/item/3bb30f43a04f58e7d72afcde.html


bzoj1334: [Baltic2008]Elect

背包变种……

http://ideone.com/GAfiF


今天不想搞了……明天再说……



你可能感兴趣的:(优化,struct,网络,Blog,技术人,2010)