摘要: Analysis 这是一个经典的二分图问题,我们将图进行奇偶染色,注意边界条件的判断。再跑一遍匈牙利算法就行了,跟上一题很像。 阅读全文
posted @ 2019-07-25 13:08 handsome_zyc 阅读(281) 评论(0) 推荐(0) 编辑
摘要: Analysis 这道题是二分图匹配,设可以放車的的地方的坐标为(i,j),则连一条i到j的有向边(注意是有向边),然后再跑匈牙利算法就好了。时间复杂度是O(nm(n+m)),在1≤n,m≤200的情况下可以接受。 阅读全文
posted @ 2019-07-25 10:49 handsome_zyc 阅读(202) 评论(0) 推荐(0) 编辑
摘要: read 函数 inline int read() { int x=0,f=1; char c=getchar(); while(c<'0'||c>'9') {if(c=='-') f=-1; c=getchar();} while(c>='0'&&c<='9') {x=x*10+c-'0'; c= 阅读全文
posted @ 2019-07-24 14:32 handsome_zyc 阅读(638) 评论(0) 推荐(0) 编辑
摘要: Tarjan 模板题 第一问就是缩点之后看有多少个入度为零的点就好了。 第二问是在缩点后将每个点的入度和出度都求出(只要有入度或出度就置为1),然后比较哪个有值的多,将多的作为答案输出。原因是由题可得,要使缩完的点也构成一个强连通分 量,即入度和出度都大于等于1。 阅读全文
posted @ 2019-07-24 14:27 handsome_zyc 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 一道经典的割点例题,用size数组记录该子树有多少个节点,sum是这棵搜索树上有多少个节点,sum*(n-sum-1)是将点删掉后的数对数量。 阅读全文
posted @ 2019-07-24 14:22 handsome_zyc 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 今天学了割点,就A了这道板子,比较难理解的地方就在于如果是根节点就要找两个点来满足low[y]>=dfn[x],如果不是就只需找一个点来满足。Tarjan(i,i)中第一个i是开始搜索的点而第 二个i代表根节点,就是这棵搜索树的根,虽然一开始值是一样的,但x是要随着搜索向下找的,而根节点在搜索过程中 阅读全文
posted @ 2019-07-24 14:21 handsome_zyc 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 今天学了强连通分量的Tarjan算法,做了这道类似于板子题的题(尽管我调了1.5h)。主要的思路是用Tarjan缩点之后,求每个点的入度(实际上是出度,因为我是反着连边的)。如果 有且只有一个点的入度大于零,那个强连通分量里有的点的个数就是答案。具体实现见代码: 阅读全文
posted @ 2019-07-24 14:18 handsome_zyc 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 今天学了网络最大流,EK 和 Dinic 主要就是运用搜索求增广路,Dinic 相当于 EK 的优化,先用bfs求每个点的层数,再用dfs寻找并更新那条路径上的值。 EK 算法 Dinic 算法 阅读全文
posted @ 2019-07-24 14:14 handsome_zyc 阅读(337) 评论(1) 推荐(1) 编辑
摘要: 差分约束系统,维护前缀和,根据式子d[ b ] < = d[ e + 1 ] - t,可以看出要连e和b - 1,但占用了超级源点0,所以要把区间向后移,这样就可以用超级源点0来保持图的连通性(也可 以用n + 1作为超级源点,就不用了后移了) 阅读全文
posted @ 2019-07-24 14:11 handsome_zyc 阅读(374) 评论(0) 推荐(0) 编辑
摘要: 今天学了差分约束系统, 这是一道板子题。 核心:a[v]>a[u]+d 相当于从u到v连一条长度为d的有向边。由于要判断有环,所以要从0点先跑一遍spfa因为1点不一定能到所有的点。 阅读全文
posted @ 2019-07-24 14:07 handsome_zyc 阅读(237) 评论(0) 推荐(0) 编辑