随笔分类 - 算法入门经典训练指南 chapter 5 图论算法与模型
摘要:二分法+spfa判负环。如果存在一个环sum(wi)using namespace std;const int maxn = 51;struct Edge{ int v,nxt; double w;};vector edges;int head[maxn];#define PB push...
阅读全文
摘要:很多的边会被删掉,需要排除一些干扰进行优化。和UVA - 1279 Asteroid Rangers类似,本题最关键的地方在于,对于一个单源的最短路径来说,如果最短路树上的边没有改变的话,那么最短路肯定是不会变的,所以只要枚举删掉最短路树上的边。这样的时间复杂度就能过了。#includeusing ...
阅读全文
摘要:求出家到其他点的最短路径,题目的条件变成了u->v不是回头路等价于d[u]>d[v]。然后根据这个条件建DAG图,跑dp统计方案数,dp[u] = sum(dp[v])。#includeusing namespace std;const int maxn = 1001, maxm = 2002;st...
阅读全文
摘要:题目的要求一个最小值最大,二分即可,但是怎么判断呢?飞机早或者晚两种状态,可以用一个布尔变量表示,假设当前猜测为m,那么根据题意,如果x和y所对应的时间冲突那么就是¬(xΛy)化成或的形式(¬x)V(¬y),就可以套用twoSAT了。关于2-SAT,简单理解是,把逻辑推导变成一条有向边,然后跑图判断...
阅读全文
摘要:给出一个有向图,求一个最大的结点集合,任意两个点u,v。u可到达v或v可到达u。一个强连通分量肯定一起选的。而且只能在一条路径上。所以先找出所有scc,然后缩点找一条最大权的路径,按拓扑序跑DAG上的dp。注意0,0这组数据#includeusing namespace std;const int ...
阅读全文
摘要:把证明的关系看出一张图,最终就是要所有的点都在至少一个环中。环的判断和度数有关。用tarjan找强连通分量,在一个强连通分量点已经等价缩点以后形成一个DAG,计算入度为0的点数a,出度为0的b,取其中大的一个。特判强连通分量数为1的情况。看懂tarjan算法以后还是比较简单的#includeusin...
阅读全文
摘要:由于互相憎恨的骑士不能相邻,把可以相邻的骑士连上无向边,会议要求是奇数,问题就是求不在任意一个简单奇圈上的结点个数。如果不是二分图,一定存在一个奇圈,同一个双连通分量中其它点一定可以加入奇圈。很明显,其它点和已知的奇圈相连总是有两条点数一奇一偶的路径,因此一定可以找到一条回路使得新的这个点加入一个奇...
阅读全文