「HNOI 2015」菜肴制作】的更多相关文章

题目链接 戳我 \(Description\) 有若干限制,需要求一个\(1\)到\(n\)的排列,每个限制\((x,y)\)表示\(x\)必须在\(j\)之前,并要求所求的排列满足所有限制并让\(1\)的位置尽量靠前,在此基础上让\(2\)的位置尽量靠前,以此类推. \(n<=100000\) \(Solution\) 这题直接拓扑排序选字典序最小的显然不行,因为题目要求不是问字典序最要,而是要: 满足所有限制并让\(1\)的位置尽量靠前,在此基础上让\(2\)的位置尽量靠前,以此类推 那么我…
\(Description\) 有\(n\)个元素,对于每个元素\(x_i\)最多知道一个形如\(x_j < x_i\)或\(x_j=x_i\)的条件,问有多少合法的序列.合法的序列满足每个元素出现一次,任一相邻两元素之间有小于号或或等于号,并且所有条件全部满足,但是对于两个序列,如果只修改相等元素的位置能使得他们一样,则是他们为同一序列,答案队\(10^9\)取模 \(n<=100\) \(Solution\) 认真读题后可以发现: 对于每个元素\(x_i\)最多知道一个形如\(x_j<…
\(Description\) 有\(n\)张卡牌,每一张卡牌有\(p_i\)的概率发动,并造成\(d_i\)点伤害.一共有\(r\)轮,每一轮按照编号从小到大依次考虑,如果这张牌已经发动过则跳过该牌,否则以\(p_i\)的概率发动,如果发动成功则造成伤害然后结束该轮,否则跳过这张牌.问期望造成的伤害,\(T\)组询问 \(n<=220,r<=132,T<=444\) \(Solution\) 这道的答案怎么算应该挺好想的吧. \[\sum_{i=1}^n dp[i]*d[i]\] \(…
题目链接 戳我 \(Description\) 给一张\(n\)割点\(m\)条边的\(DAG\),保证点\(1\)不存在入边,现在需要在\(DAG\)中加入一条不在原图中的边\((x,y)\),求这个有向图以\(1\)为根的树形图个数对\(1e9+7\)去模的结果 \(n<=100000,m<=200000\) \(Solution\) 我们首先来看看如果没有\((x,y)\)这一条边的话,在\(DAG\)上的方案数为多少? \[ans=\prod_{i=1}^{n} vis[i]\] \(…
「HNOI2015」菜肴制作 这道题想到了其实还挺水的,一开始我直接用小根堆拓扑然后就爆0了,然后我又用十万个堆搜索,T30,还是xkl告诉我要倒着拓扑. 首先要建反图,对于入度为0的点,较小的点先输出所以要优先拓扑大的点,这样就保证了大的点及其子树(其实并不是树,这样好理解点)都存在数组前面,再倒着输出即可. #include<iostream> #include<cstring> #include<cstdio> #include<time.h> #in…
LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想到先枚举这个\(D\),然后极角序排一下,我们枚举\(A\),对\(B,E,F\)分别统计. 枚举\(A\)的过程中用一个指针维护\(E,F\)的范围,对答案贡献是一个\(\sum\binom{x}{2}\)的形式,容易维护. 然后现在要求\(B\)的方案数,可以发现符合条件的\(BC\)一定满足线段\(…
题解 把所有边反向 从小到大枚举每个点,把每个点能到达的点挑出来,判完无解后显然是一个DAG,然后在上面求一个编号最大的拓扑序,把这些点全部标记为已选,把每次求得的拓扑序倒序输出 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define enter putchar(…
一道清真的数论题 LOJ #3058 Luogu P5293 题解 考虑$ n=1$的时候怎么做 设$ s$为转移的方案数 设答案多项式为$\sum\limits_{i=0}^L (sx)^i\binom{L}{i}=(sx+1)^L$ 答案相当于这个多项式模$ k$的各项系数的和 发现这和LJJ学二项式定理几乎一模一样 我上一题的题解 然而直接搞是$ k^2$的,无法直接通过本题 以下都用$ w$表示$ k$次单位根 设$ F_i$为次数模$ k$为$ i$的项的系数和 单位根反演一下得到$F…
\(Description\) 给你一个序列,每次询问一个区间,求其所有子区间的最小值之和 \(Solution\) 这里要用莫队算法 首先令\(val\)数组为原序列 我们考虑怎么由一个区间\([l,r]\)到\([l,r+1]\) 我们发现新增加的区间为: \[[l,r+1],[l+1,r+1],[l+2,r+1]...[r,r+1],[r+1,r+1]\] 我们令\([l,r+1]\)内的最小值的位置为\(x\) 则\([l,r+1],[l+1,r+1]...[x-1,r+1],[x,r+…
\(Description\) \(n\)堆石子,每堆石子有\(s_i\)个,两个人轮流操作,每次可以将一对不少于\(F\)的石子尽量平均分成\(m\)堆,\(m\)每次自选,不能操作者输.共有\(T\)组数据 \(Solution\) \(70\ pts\) 直接\(SG\)搞一搞就好了,枚举堆的个数,异或一下就没了 \(Code\) #include<bits/stdc++.h> #define int long long using namespace std; typedef long…
题目链接 戳我 \(Solution\) 这一题很像最小乘积生成树.只是把\(kruskal\)变为了\(km\)/费用流 现在来讲一讲最小乘积生成树.首先将\(\sum a_i\)和\(\sum b_i\)看为坐标轴上的点\((x,y)\) \(step 1:\) 首先找出离\(x\)最近的点和离\(y\)最近的点 \(step 2:\) 找出距离\(A,B\)最远的\(C\)(\(C\)要在\(A,B\)左边) \(step 3:\) 递归处理\(AC\)和\(CB\),直到找不到\(C\)…
题目链接 戳我 \(Solution\) 首先申明几个变量: f[x]:到点x的概率, vis[x]:x点的度 dp[x][y]:(x,y)这条边的概率 number[x][y]:x这条边的编号 下面的式子保证存在一条(x,y)的边 我们可以知道总分的期望为: \[\sum dp[x][y]*number[x][y]\] 即:所有边的期望成这条边的编号的和 那么\(dp\)数组怎么算呢? \[ dp[x][y]=\frac{f[x]}{vis[x]}+\frac{f[y]}{vis[y]}\]…
题目链接 戳我 \(Solution\) 这道题观察数据范围发现很小,再看看题目可以发现是搜索. 这题纯搜索会\(T\)所以要加入适当剪枝 如果一个人后面的比赛都赢却依旧到不了目标分数,则直接\(return\) 限制每个人的分数,使他的分数不超过目标分数 我们用\(fx\)当做分出胜负的场次,\(fy\)当做平的场,ans当做总分数.则可以列出如下方程: \[ \left\{ \begin{array} fx+fy=n*(n-1)/2\\ 3*fx+2*fy=ans \ \end{array}…
题目链接 戳我 \(Solution\) 我们首先想一想如果这一题只是二维的该怎么办? 就是一个最小点覆盖问题.这里就不详细解释了,用网络流或匈牙利都无所谓. 但现在是三维的,那么现在该如何处理呢? 我们发现\(a*b*c<=5000\),所以必定有一个要小于\(\sqrt[3]{5000}\) 所以我们可以枚举最小的一维的状态,那一维已经消了,还是没消. 对于没消的直接如同二维的跑最小点覆盖就好了. 但是\(bzoj\)实在卡不过去 \(Code\) #include<bits/stdc++…
题目链接 戳我 \(Describe\) 谁出的题目啊?这么长的题面,看完就滚粗了.强烈谴责 给一棵树,每个点有一个权值,要求修改一些权值,使: 一个点的权值必须是其所有儿子的权值之和 一个点的儿子权值必须相同 求最少的被修改的数目 \(Solution\) 随便画一画图就可以找到一些显著的规律,只要确定了一个点的权值就可以知道整颗树的值了. 这里就不详细的给出图进行解释了,自己画一画图就可以知道了. 于是我们可以令\(val[x]\)表示\(x\)这个点不变的话,根节点的值. 但是将子节点的个…
题目链接 戳我 \(Solution\) 这道题貌似并不难的样子\(QAQ\) 我们发现这个因为有首项的关系所以有点不太好弄.所以我们要将这个首项对答案的影响给去掉. 我们可以构建一个差分数组,我们令他等于\(a[1],a[2]...a[k-1]\) 则一个差分数组对答案的贡献为: \[\sum_{i=1}^{k-1}n-a[i]\] 然后我们一共有\(m^(k-1)\)个这样的查分数组,所以总贡献为: \[\sum_{j=1}^{m^{k-1}}\sum_{i=1}^{k-1}n-a[j][i…
题意 你需要维护若干连通快,有两个操作 合并\(x,y\)所在的连通块 询问\(x\)所在连通块中权值从小到大排第\(k\)的结点编号 题解 可以启发式合并\(splay\),感觉比较好些的 一个连通块就是一个\(splay\),每次合并挑小的\(splay\)遍历一遍把点按中序遍历存下来,然后一个一个插入大的\(splay\)就行了:查询就是\(splay\)的\(kth\)操作 这样时间复杂度\(O(n \log n)\),它的证明可以见2018论文集 :董炜隽<浅谈Splay与Treap的…
题意 设\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^{n}\sum_{j=1}^{m}d(ij)\). 题解 首先证个公式: \[d(ij) = \sum_{x|i}\sum_{y|j} [gcd(x,y)=1]\] 可以这么考虑:利用唯一分解定理把\(i,j\)分解,即: $i=\prod_{k = 1}^{m} p_k^{c_k},j=\prod_{k=1}^m p_k^{d_k} $ 那等式左边显然为\(\prod(c_k+d_k+1)\), 然后考虑等式右边在干什…
[题目描述] 礼品店一共有N件礼物排成一列,每件礼物都有它的美观度.排在第\(i(1\leq i\leq N)\)个位置的礼物美观度为正整数\(A_I\).JYY决定选出其中连续的一段,即编号为礼物\(i,i+1,-,j-1,j\)的礼物.选出这些礼物的美观程度定义为:\((M(i,j)-m(i,j))/(j-i+K)\),其中\(M(i,j)\)表示\(max\{A_i,A_{i+1}....A_j\}\),\(m(i,j)\)表示\(min\{A_i,A_{i+1}....A_j\}\),\…
传送门 Luogu 解题思路 这是一道 \(O(n^2)\) 暴力加上 \(\text{random_shuffle}\) 优化 什么鬼 就可以 \(\text{AC}\) 的题. 但还是要讲一下 \(O(n)\) 的正解. 算了我不讲了咕咕咕,可以去这里 细节注意事项 有点难想,但是并不难写 参考代码 #include <algorithm> #include <iostream> #include <cstring> #include <cstdlib>…
传送门 Luogu 解题思路 考虑树形 \(\text{DP}\) 设状态 \(dp[u][i][j]\) 表示从首都走到点 \(u\) ,经过 \(i\) 条公路,\(j\) 条铁路的最小不方便值. 对于叶子节点也就是村庄,直接初始化,对于非叶子节点也就是城市,就从两个儿子向上转移. 而现在的一个问题就是:我们的 \(dp\) 数组根本开不下. 我们不得不优化空间. 考虑到一个性质:每次的答案都是从儿子向上合并,合并过后的节点就没用了. 所以我们只需要在dfs的过程中给每个节点记一个 \(df…
题目描述 JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物.萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都排成一列,而且相邻的礼物之间有一种神秘的美感.于是,JYY决定从中挑选连续的一些礼物,但究竟选哪些呢?假设礼品店一共有N件礼物排成一列,每件礼物都有它的美观度.排在第i(1\leq i\leq N1≤i≤N)个位置的礼物美观度为正整数A_iAi​.JYY决定选出其中连续的一段,即编号为礼物i,i+1,…,j-1,ji,i+1,…,j−1,j的礼物.选出这些礼物的美…
\(\mathcal{Description}\)   Link.   求含 \(n\) 个点的无标号简单无向图的个数,答案模 \(997\). \(\mathcal{Solution}\)   首先,把题目转化成为有标号 \(K_n\) 的 \(\binom{n}{2}\) 条边染黑(不选)白(选)两种颜色,求本质不同(去除标号)的方案数.想到使用 Pólya 定理求解.设在某个点转置中,循环大小为 \(a_1,a_2,\cdots,a_k\),分别考虑循环内部和循环间的边等价类:   对于大…
\(\mathcal{Description}\)   Link.   不想概括题意.jpg \(\mathcal{Solution}\)   定义点集 \(S_c=\{(u,v)|v=c\}\):第 \(k\) 层点表示所有满足 \(u=k\) 的结点 \((u,v)\).   尝试朴素 DP,令 \(f(i,j)\) 表示兔子从 \((0,x)\) 出发跳 \(i\) 步到达某个 \((u,v)\in S_j\) 的方案数(到达结点不同算不同方案):\(g(i,j)\) 表示兔子从 \((0…
\(\mathcal{Description}\)   Link.   给定一棵 \(n\) 层的完全二叉树,你把每个结点染成黑色或白色,满足黑色叶子个数不超过 \(m\).对于一个叶子 \(u\),若其 \(k\) 级父亲与其同为黑色,则对答案贡献 \(a_{uk}\):若同为白色,则对答案贡献 \(b_{uk}\).求最大贡献和.   \(n\le10\). \(\mathcal{Solution}\)   想要 DP,比如令 \(f(u,i)\) 表示 \(u\) 子树内有 \(i\) 个…
\(\mathcal{Description}\)   Link.   给定 \(n\) 堆石子,数量为 \(\{a_n\}\),双人博弈,每轮操作选定 \(i<j\le k\),使 \(a_i \leftarrow a_i-1\),\(a_j \leftarrow a_j+1\),\(a_k \leftarrow a_k+1\),并保证操作后所有 \(a_i\ge0\).求保证先手胜的第一步操作方案数和字典序最小的第一步操作.   多测,\(n\le21\),\(0\le a_i\le10^4…
一.树形 DP 基础 又是一篇鸽了好久的文章--以下面这道题为例,介绍一下树形 DP 的一般过程. POJ 2342 Anniversary party 题目大意:有一家公司要举行一个聚会,一共有 \(n\) 个员工,其中上下级的关系通过树形给出.每个人都不想与自己的直接上级同时参加聚会.每个员工都有一个欢乐度,举办聚会的你需要确定邀请的员工集合,使得它们的欢乐度之和最大,并且没有一个受邀的员工需要与他的直接上级共同参加聚会.\(n\leq 6000\). Solution: 考虑一个子树往上转…
Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号为1.由于菜肴之间口味搭配的问题, 某些菜肴必须在另一些菜肴之前制作,具体的,一共有 M 条形如“i 号菜肴‘必须’ 先于 j 号菜肴制作”的限制,我们将这样的限制简写为<i,j>.现在,酒店希望能求 出一个最优的菜肴的制作顺序,使得小 A能尽量先吃到质量高的菜肴:也就是说, (1)在满足所有限制…
4010: [HNOI2015]菜肴制作 Time Limit: 5 Sec  Memory Limit: 512 MBSubmit: 1776  Solved: 889[Submit][Status][Discuss] Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1到N的顺序编号,预估质量最高的菜肴编号为1.由于菜肴之间口味搭配的问题, 某些菜肴必须在另一些菜肴之前制作,具体的,…
「清华集训2015」V 题目大意: 你有一个序列,你需要支持区间加一个数并对 \(0\) 取 \(\max\),区间赋值,查询单点的值以及单点历史最大值. 解题思路: 观察发现,每一种修改操作都可以用一个函数 \(f(x) = \max(x+a,b)\) 来表示. 操作 1: \(f(x) = (x,0)\). 操作 2:\(f(x)=(-x, 0)\). 操作 \(3\):\(f(x)=-(inf,0)\). 这东西显然满足结合律,事实上还是封闭的 \[ f1(f2(x)) = \max(\m…