![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
强连通分量
强连通分量
JA_yichao
这个作者很懒,什么都没留下…
展开
-
YbtOJ 强连通分量课堂过关 例4 恒星的亮度【Tarjan】
思路 这道题比第三题稍微简单一点。 首先我们要把所有的"大于"“大于等于”“不大于”“不小于”转换成“小于”和“小于等于”。 然后就把小的向大的连一条边,如果相等就连双向边。 然后就Tarjan缩点,发现相等的数会在同一个强连通分量里,所以就可以判断当一个强连通分量里出现“小于”那么就矛盾,输出-1。 这样做完之后入度为0的点(因为是一个DAG所以一定会有入读为0的点)一定是最小的点。 然后就从入度为0的点开始拓扑,在拓扑的时候不断更新点的值就好了。(为了满足所有边的情况,当前点要取 max\maxm..原创 2021-05-15 11:03:17 · 123 阅读 · 0 评论 -
YbtOJ 强连通分量课堂过关 例3 最大半连通子图【Tarjan】
思路 这道题首先题目需要加强理解,首先需要搞清楚题目中的概念。 半连通图: 一个图中任意两个点之间都有边相连。 最大半连通子图: 一个半连通图中的所有半连通子图中包含节点最多的子图。 然后先Tarjan,因为这道题中的操作和图的边相关,所以要用sort去重边。 去完重边之后考虑怎样搞。 发现可以用拓扑跑一边图然后边跑图边DP。 设 f[i]f[i]f[i] 表示以 iii 为起点的最大半连通子图的节点数,ans[i]ans[i]ans[i] 表示到i号节点(目前)最大半连通子图的个数。 然后就在拓扑的时..原创 2021-05-14 22:18:56 · 160 阅读 · 0 评论 -
YbtOJ 强连通分量课堂过关 例2 受欢迎的牛【Tarjan】
思路 感觉这道题比第一题还简单,首先搞一个Tarjan然后缩点,之后就把整个图跑一边看看有没有出度为0的点(因为只有出度为零的点才能成为明星点)。如果有两个及以上就没有明星奶牛,一个的话就直接输出这个点里面的点的数量就好了。 代码 #include<iostream> #include<cstdio> #include<cmath> #include<queue> using namespace std; int stack[100010],dfn[100..原创 2021-05-06 16:18:25 · 121 阅读 · 0 评论 -
YbtOJ 强连通分量课堂过关 例1 有向图缩点【Tarjan】【DP】【拓扑排序】
思路 这道题首先搞一个 TarjanTarjanTarjan,求出所有强连通分量。 然后就缩点,具体做法是枚举每条边然后判断这条边上的点在不在同一个强连通分量上,不在就连边。 然后就做一个DP+拓扑排序,边拓扑边DP,f[y]=max(f[y],f[x]+cnt[y])f[y]=\max(f[y],f[x]+cnt[y])f[y]=max(f[y],f[x]+cnt[y]); 代码 #include<iostream> #include<cstdio> #include<..原创 2021-05-05 17:04:53 · 136 阅读 · 0 评论