
图论-拓扑
Endless_Way
这个作者很懒,什么都没留下…
展开
-
BZOJ 4562 [Haoi2016]食物链
DAG+DPf[i]表示方案数,于是可以从i的所有儿子转移来。方便起见我加的是反边。#include<cstdio>#include<queue>#define N 100005#define M 200005using namespace std;queue<int> q;int n, m;struct edge{int next,to;}e[M];int last[N], f[N原创 2016-09-14 10:17:24 · 271 阅读 · 0 评论 -
BZOJ 4011 [HNOI2015]落忆枫音
拓扑图DP对于拓扑图,deg[i]表示i的入度,根为1,答案就是 ∏ni=2deg[i]\prod_{i=2}^{n} deg[i]即除根节点外,每个点都选择一条入边,由于图是DAG,因此一定会形成一个树形图(听说这是朱刘算法的推论?)考虑加完边之后有环怎么办?只要在答案里减去环的贡献即可。如何求环的贡献?当环的边全部被选时,方案数肯定是所有非环上点(除了根)的入度之积。脑补即可证明。附大爷题解:h原创 2016-09-28 14:24:52 · 321 阅读 · 0 评论 -
BZOJ 3832 [Poi2014]Rally
拓扑排序+堆暴力的做法是枚举删掉哪一个点,然后DP出删掉这个点之后的最长链长度。那么我们来挖掘一下删点之后的最长链的性质。记删点为x,记所有能走到x的点集为S1, 所有x能走到的点集为S2,注意到最长链上可能存在一些点属于S1或S2,同时也一定存在一些点既不属于S1,也不属于S2!(反证法)于是我们考虑能不能通过这些既不属于S1也不属于S2的点来找到当前最长链,这启发我们应该把最长链信息记录在中间,原创 2016-11-09 11:02:24 · 341 阅读 · 0 评论 -
BZOJ 4010 [HNOI2015]菜肴制作
拓扑排序正着贪心字典序最小肯定错。那我们要让小的尽量前,考虑找到一个反着的字典序最大的序列。 网上很少有证明,这里存一下证明。 反着拓扑排序时,如果有一次没有选择最大的那一个,则设当时最大的是A,选的是a,(A>a)。则假设最终序列为(S1)A(S2)a(S3),那么显然可以把A放到a后面,变成(S1)(S2)aA(S3),使得答案更优。/***************************原创 2017-03-25 00:03:37 · 501 阅读 · 0 评论