摘要: 本题的大意就是加最少的边使得图成为边双。 多举例子,画图分析可得:最终答案就是叶子节点(度数为1的点)的个数加1在除以2。 那么我们的目的就转化为找叶子节点: 首先通过tarjan找到割边,再dfs将原图分为几个边双(通过割边划分),缩点,最后统计度数为1的节点个数即可。 1 #include <b 阅读全文
posted @ 2022-06-10 21:55 YHXo 阅读(54) 评论(0) 推荐(0)
摘要: 在本题中很明显,给你一个有向图,要用tarjan缩点。 缩点后,一头牛要受到所有牛的欢迎,那么该点的出度要为0,这是容易证明的:如果该点还有出度,比如a连向b,那么a不受到b的欢迎。所以我们要找出度为0的点,找到后该点中点的个数就是答案。 注意:出度为0的点只能有一个,如果有多个出度为0的点,那么这 阅读全文
posted @ 2022-06-10 21:14 YHXo 阅读(74) 评论(0) 推荐(0)
摘要: 题目简述:一个有向图,求出这个图点数>1的强连通分量的个数。 那么就是tarjan求强联通分量的模板了。 记得要用一个数组标记节点是否在栈中。 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e5+10; 4 int h 阅读全文
posted @ 2022-06-10 19:40 YHXo 阅读(36) 评论(0) 推荐(0)
摘要: 圆方树大致理解:将每个点双看做一个新建的点(方点),该点双内的所有点(圆点)都向新建的点连边,最后形成一棵树,可以给点赋予点权,用以解决相关路径问题。 在本题中,方点点权赋值为该点双的大小,因为两个点双最多有一个交点,将圆点赋为-1来去重,先用tarjan()构建出圆方树,在跑一遍dfs,dfs枚举 阅读全文
posted @ 2022-06-10 19:09 YHXo 阅读(52) 评论(0) 推荐(0)