3.21之前刷题总结

我太弱了。。。

[toggle title="太长了只好折叠起来>_<"]

1293: [SCOI2009]生日礼物

队列,排序。 按位置排序,依次加入队列。加入一个元素后判断,保证队首颜色只有一种。

1083: [SCOI2005]繁忙的都市

最小生成树,水题。

1237: [SCOI2008]配对

 

1015: [JSOI2008]星球大战starwar

离线倒着做并查集。把星球一个个的加入图中。一开始没过是因为有一个i写成x了。。。

1602: [Usaco2008 Oct]牧场行走

Lca。 用len[i,k]记录距离:  len[i,j]:=len[i,j-1]+len[p[i,j-1],j-1]; 求lca时顺便求一下距离。最后不要忘了求完lca后a与b同时再往上提一次提到根。

1854: [Scoi2010]游戏

二分图匹配。 属性向装备连边。比较特殊的是做到某一次不能匹配时就立刻停止。 注意for i:=1 to m+1 do 因为是输出i-1 所以要到m+1 。 wa了好几次。。。。

1497: [NOI2006]最大获利

最大权封闭子图。 站点权为负值,若两点间有收益则新建一个点,权为正收益,向两点连边。 最后求一遍最大权封闭子图就是答案。 因为建图时弄成了long[other[ee]]:=c;而不是0 所以调了好半天。。。

1565: [NOI2009]植物大战僵尸

最大权封闭子图。 由被保护的向保护者连有向边。注意因为可能有环,环上的都不可能被吃掉,所以要先用拓扑排序消环。先把所有的边反向,每次选入度为1的点删除,最后被访问过的点加入图中。 由于可能有一个环保护一个点的情况,所以强连通分量是不对的(坑)。

1088: [SCOI2005]扫雷Mine

数学,水题。 因为发现前两个格子确定后,后面的都可以确定,所以枚举第一个格子就行了。

1051: [HAOI2006]受欢迎的牛

强连通分量。 缩点后,若有一个出度为0的点,则输出点集中点个数。若有多个则impossible。

1189: [HNOI2007]紧急疏散evacuate

网络流,spfa,二分答案。

1296: [SCOI2009]粉刷匠

动态规划,前缀和。 sum[i,j,1],sum[i,j,0]维护前缀和 f[i,j,k]表示第i行前j个格子刷k次能正确粉刷的最大格子数。ans[i,j]表示前i行刷j次所能正确刷的最大格子数。 f[i,j,k]=max(f[i,j,k]  ,f[i,l,k-1] +  max(sum[i,j,1]-sum[i,l,1] , sum[i,j,0]-sum[i,l,0])); ans[i,j]= max(ans[i,j],ans[i-1,j-k]+f[i,m,k]); L要从0开始循环,wa了2次。

1230: [Usaco2008 Nov]lites 开关灯

线段树。 区间修改,xor 1 。

1193: [HNOI2006]马步距离

 

1103: [POI2007]大都市meg

线段树维护dfs序。dfs序中一棵子树对应的区间是连续的一段,我们可以区间修改。

1050: [HAOI2006]旅行comf

枚举最小边,然后由小到大向里面加边。直到s,t连通。

1005: [HNOI2008]明明的烦恼

树的prufer数列,数学 设没有度数限制的点有m个,有度数限制的点度数为d[i], t:=∑(d[i]-1)。 答案为m^(n-2-t) * C(n-2,t) * t! / 用高精度乘法,除数与被除数每个数分解质因数,排序后相同的消除。

1003: [ZJOI2006]物流运输trans

动规,spfa f[i]表示从第一天到第i天最少总成本。 cost[x, y]表示第x天到第y天只用同一运输方案所用的最少成本,spfa预处理得到。 f[i]=min(f[i],f[j]+cost[j+1][i]+k);

1607: [Usaco2008 Dec]Patting Heads

p[i]表示i出现了几次。 for j:=1 to ] do  ans:=ans+ p[j] + p[a[i] div j]  (a[i] mod j=0) 加p[a[i] div j]条件是j*j<>a[i]。

1934: [Shoi2007]Vote 善意的投票

最大流。 建立S,T,同意的向S连边,不同意的向T连边,朋友之间连边,流量都是1. 跑最小割。

2783: [JLOI2012]树

树上倍增。 枚举每个点i,if (now+sum[a,i]<=s) then <倍增>

2761: [JLOI2011]不重复数字

平衡树。 水题,先查找有没有这个数,没有就加入。

2431: [HAOI2009]逆序对数列

动规,前缀和。 用f[i][j]表示用1~i这些自然数组成的逆序对数为j的数列个数。 f[i][j] = Σ f[i - 1][j - k] (0 <= k < i)  前缀和优化一下sum[i,j]= Σ f[i ][k](0<=k<=j)

2748: [HAOI2012]音量调节

大水题。Bool型动规。

1026: [SCOI2009]windy数

令f[i][j]为有i位,且第i位(从右数,下同)为j的w数的个数 。

if abs(j-k)>=2 then f[i,j]:=f[i,j]+f[i-1,k];

然后计算0—x中的windy数个数(乱搞)

1031: [JSOI2007]字符加密Cipher

后缀数组。 复制一段在后面,按sa数组顺序输出字母(sa[i]只取前半个串的)

1036: [ZJOI2008]树的统计Count

树链剖分。

1834: [ZJOI2010]network 网络扩容

水,最小费油最大流。

2054: 疯狂的馒头

并查集。 倒着染色,染过的就不会再染了。 并查集维护哪些染过,一个集合里是一段连续区间,维护区间末尾是哪。 碰到染过的就跳到区间结尾。

2875: [Noi2012]随机数生成器

矩阵乘法。 A={c,x0}, b=    快速幂+化乘为加。

1651: [Usaco2006 Feb]Stall Reservations

线段树。 初始数列都是0,给一个区间则加上1,最后最大值就是答案。

1233: [Usaco2009Open]干草堆tower

1638: [Usaco2007 Mar]Cow Traffic

求出走到每个点有的方法数a[i],再求出每个点到终点的方法数b[i]。 每条边走的 次数=a[u[i]]*b[v[i]] 。 可以用类spfa按照拓扑序求a[i],把入度为0的点都入栈然后a[e[j]]=a[e[j]]+a[q[h]] 求b[i]可以把边反向重新spfa一遍。

1208: [HNOI2004]宠物收养所

平衡树。 abs用到int64时一定要手写!!

1691: [Usaco2007 Dec]挑剔的美食家

贪心,平衡树。 商品按照价格排序后贪心。用sbt找小于等于某个数的最大数。

2252: [2010Beijing wc]矩阵距离

bfs。 从所有1的点同时广搜,每次同时拓展所有点,ans=拓展次数  

1047: [HAOI2007]理想的正方形

dp,单调队列。 求出每个点向上n个数中的最大,最小值。 再在新求出的矩阵中求出每个点向左n个的最大最小值,即每个点左上n*n的矩阵中的最值。

1989: Bonus 奖励计划

数学期望。 总费用=所有边的平均费用和 每条边的费用=被优惠且走过的概率*长度,因为长度都是1,所以就是概率。 被优惠且走过的概率=优惠路径中包含这条边的概率*走过这条边的概率。 =(总包含这条边的路径数/总路径数)^2 包含的路径数用两边的点数乘起来就行了。

2718: [Violet 4]毕业旅行

二分图匹配。 每个点向能走到的点连边,然后二分图匹配。 用floyd求两点是否能到达。

1572: [Usaco2009 Open]工作安排Job

堆,贪心。 按截止时间排序,如果能完成就完成,加入堆中。不能就和最小值比较,若大于最小值就替换掉最小值。

1638: [Usaco2007 Mar]Cow Traffic

拓扑序spfa求出走到每个点的方法数f[i],和每个点走到终点的方法数ff[i](建反向图); 每条边次数=f[u[i]]*ff[v[i]]。

1433: [ZJOI2009]假期的宿舍

二分图匹配,水。

  1798: [Ahoi2009]维护序列seq

线段树。 对于每一个乘的标记,若下传时遇到加的标记则加的标记乘上这个值。 每次先下传乘再下传加。 [/toggle]
------------------------------------------------------------------------- 花有重开日,人无再少年
原文地址:https://www.cnblogs.com/lbz007oi/p/3067350.html