「JSOI2013」旅行时的困惑】的更多相关文章

「JSOI2013」旅行时的困惑 传送门 由于我们的图不仅是一个 \(\text{DAG}\) 而且在形态上还是一棵树,也就是说我们为了实现节点之间互相可达,就必须把每条边都覆盖一次,因为两个点之间的路径是唯一的. 那么题意就变成了:每次在图上选出一条路径,覆盖上面的边,求最小的路径数使得所有边都被覆盖至少一次. 看到这里我不禁联想起这道题 那么对于这道题我们就让源点 \(S\) 向所有点连上界为 \(+\infty\) ,下界为 \(0\) 的边,所有点向汇点 \(T\) 连边同理,然后原图中…
「JSOI2013」贪心的导游 传送门 多次询问区间内%一个数的最大值 我们不妨设这个数为M_sea 值域比较小所以考虑分块维护. 我们观察到对于给定的一个 \(p\) ,函数 \(y = x \% p\) 是分段的且在各段内递增,所以我们可以先分块,记一下每个块内小于等于某个数的最大值,记为 \(g_i\) ,那么我们显然是要在所有的 \(i = kp - 1, k \ge 1\) 中查询 \(g_i\) 并减掉会被 % 掉的部分,那么我们就可以预处理出一个块内的答案了,然后查询的时候暴力查就…
「JSOI2013」哈利波特和死亡圣器 传送门 首先二分,这没什么好说的. 然后就成了一个恒成立问题,就是说我们需要满足最坏情况下的需求. 那么显然在最坏情况下伏地魔是不会走回头路的 因为这显然是白给 那么我们肯定需要在所有它可能去的下一个点都设置防御. 也就是说要对当前ta所在点的所有叶子设防. 那么我们就可以考虑 \(\text{DP}\) ,设 \(dp_i\) 表示在以 \(i\) 为根的子树中设防(注意这里不包括 \(i\) )还需要多少成员. 那么转移就是:\(dp_u = \max…
「JSOI2013」侦探jyy 传送门 个人感觉我写的复杂度不够优秀啊,但是好像没有别的办法了... 我们枚举每个点,考虑这个点能不能不发生. 首先我们从这个点开始,在反图上面 \(\text{BFS}\) 只要碰到已经发生的点则这个点必须发生. 然后我们再考虑是不是能满足题目要求的点都发生,那么我们就把所有之前那次 \(\text{BFS}\) 没有访问到的入度为零的点都用来在原图上 \(\text{BFS}\) ,如果还是存在一个点不能被满足则这个点也必须发生. 否则可以不发生. 复杂度好像…
「JSOI2013」游戏中的学问 传送门 考虑 \(\text{DP}\) 设 \(dp_{i, j}\) 表示将前 \(i\) 个人分成 \(j\) 个集合,并且第 \(i\) 个人在第 \(j\) 个集合的方案数. 转移就是: \[ dp_{i, j} = dp_{i - 1, j} \times (i - 1) + dp_{i - 3, j - 1} \times {i - 1 \choose 2} \times 2 \] 其中前面那一项就是加入一个人,感觉有点像第一类斯特林数递推式中的一…
「JSOI2010」旅行 传送门 比较妙的一道 \(\text{DP}\) 题,思维瓶颈应该就是如何确定状态. 首先将边按边权排序. 如果我们用 \(01\) 串来表示 \(m\) 条边是否在路径上,那么我们就可以通过钦定前 \(x\) 条边在路径上来确定目标状态. 其中有的边消耗了魔法使用次数,有的没消耗. 那么我们就可以设 \(dp[i][j][k]\) 表示到点 \(i\) ,经过了前 \(j\) 条被钦定边,并且使用了 \(k\) 次魔法的最短路,那么转移就是(假设我们现在要从点 \(u…
题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰. 为了方便,我们用不同的正整数代表各种宗教, S国的居民常常旅行.旅行时他们总会走最短路,并且为了避免麻烦,只在信仰和他们相同的城市留宿.当然旅程的终点也是信仰与他相同的城市.S国政府为每个城市标定了不同的旅行评级,旅行者们常会记下途中(包括起点和终点)留宿过的城市的评级总和或最大值. 在S国的历史上常会发生以下…
网络流建图. 从S向每个点连边,从每个点向T连边. 每条树边反向连一条下界为1,上界inf的边. 跑最小流. 注意加当前弧优化. #include<cstdio> #include<algorithm> #define inf 0x3f3f3f3f #define N 500005 #define M 5000005 using namespace std; int head[N],ver[M],nxt[M],f[M],tot,ch[N],cur[M]; void add(int…
据说正解是有上下界最小流,但是这种1e5的玩意问什么要跑网络流啊-- 贪心即可,注意一点是可以有多条路径经过一条边-- 以1为根,设d[u][0/1]为u到父亲的边是向下/向上,g记录这个点儿子中不能抵消且和它的d相同(同方向)的点个数,这里的抵消是一个0和一个1可以凑一条路径直接加进答案里,在dfs儿子的时候统计一下即可 #include<iostream> #include<cstdio> using namespace std; const int N=100005; int…
题面: Waldives 有 N 个小岛.目前的交通系统中包含 N-1 条快艇专线,每条快艇 专线连接两个岛.这 N-1条快艇专线恰好形成了一棵树. 由于特殊的原因,所有N-1条快艇专线都是单向的.这导致了很多岛屿之间 不能相互到达.因此,Waldives 政府希望新建一些公交线路,使得建设完毕后, 任意两个小岛都可以互相到达.为了节约开支,政府希望建设最少的公交线路.  同时,出于规划考虑,每一条公交线路都有如下的要求: 1.每一条交通线路包含若干条连续的快艇专线,你可以认为一条公交线路 对应…