首页 > 其他 > 详细

20180713NOIP模拟赛

时间:2018-07-13 22:03:38      阅读:180      评论:0      收藏:0      [点我收藏+]

20180713NOIP模拟赛

T1:动物园 zoo.cpp 2s

  • 【题目描述】
    给定一张图,点有点权,求每个点到其他所有点中所有点的权值最小值之和。
  • 【思路】
    \(50pts\)做法:对于每个点跑一遍\(spfa\),对于每一遍\(spfa\)累加一下里面的答案,复杂度为\(O(nm)\)
    \(100pts\)做法:考虑如何更简便的计算答案,我们发现对于路径必然处于原图的最大生成树上,边权取两端点点权的最小值,从大到小枚举树边,每次添加一条边,对于答案的贡献就是\(ans += siz[fx] * siz[fy] * e[i].w\),最后令\(ans\)乘2即可,复杂度为\(O(mlogm)。\)

T2:线段计数 segment.cpp 2s

  • 【题目描述】
    给定一些覆盖线段,支持删除第k次操作,求线段覆盖情况。
  • 【思路】
    \(30pts:\)模拟
    \(100pts:\)树状数组,首先离散化,用两个树状数组,一个维护区间左端,一个维护区间右端,查询时用树状数组2中小于等于当前右端点的个数减去在树状
    数组 1 中查询严格小于当前左端点的个数,复杂度\(O(nlogn)\)

T3:填数游戏

  • 【题目描述】
    给定空矩阵和一些已经填了的数,只能天1或-1,求有多少种方案可以使得对于每个数的每一行或每一列乘积为-1\(?\)
  • 【思路】
    30pts做法:dfs枚举。
    10pts做法:当n+m为奇数时为0.
    由于注意到$ k < max(n,m)$,则必然有一行或一列是完全空的假设空的是一行,除了这行其他行随便填,满足其他行的乘积都是-1,然后用这一行来收尾。显然其他行都满足后,这一行只有 1种填法。
    70pts做法:由上面可得,用乘法原理直接计数。
    100pts做法:设p为当前没有填的格子数,答案为\(2^p-1\).

20180713NOIP模拟赛

原文:https://www.cnblogs.com/akoasm/p/9307427.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!