首页 > TAG信息列表 > 基环
在基环树上 判断一个点到另外一个点的路径是不是大于2
树:n点 n-1边 基环树:n点 n以上边 #include <bits/stdc++.h> using namespace std; const int N = 2e5 + 5, M = N*2; int n, q; int h[N], e[M], ne[M], idx; int fa[N], d[N]; void add (int a, int b) { e[idx] = b, ne[idx] = h[a], h[a] = idx ++; } void topsort ()[ZJOI2008] 骑士
P2607 [ZJOI2008] 骑士 思路 显然抽象成图, 由每个骑士向他最讨厌的骑士 每个节点对应一条边, 即 \(n\) 个节点, \(n\) 条边, 并且没有说任意两点相联通, 所以是基环森林. 那么很容易就能想到基环树形dp 状态 显然对于每个节点有两种选择 选( \(1\) ) 不选( \(0\) ) 很容易设计:基环树 / 环套树
基环树 / 环套树 参考资料: oi-wiki图论相关概念 岛屿题解_by暮冥 基环树_by cly_none 最近开始学基环树,思路不是很难但是实现有点难复杂,很考验基础能力。 什么是基环树: 如果一张无向连通图包含恰好一个环,则称它是一棵 基环树 。 如果一张有向弱连通图每个点的入度都为 1,则称它BZOJ 4883 [Lydsy1705月赛]棋盘上的守卫
Link 每行每列都建个点,把一个棋子看做是一条某行到某列边。 这样我们就是要找一个边集使得重定向之后可以让每个点的入度为\(1\)。 这个东西显然就是个最小生成基环森林,还是用Kruskal做,多记录一个森林是否有环就行了。 #include<cstdio> #include<cctype> #include<algorithm> n[JZOJ6346]:ZYB和售货机(拓扑+基环内向森林)
题目描述 可爱的$ZYB$来到一个售货机前。 售货机里有一共有$N(\leqslant 10^5)$个物品,每个物品有$A_i$个。自然,还有$N$个购买按钮。正常情况下,按下第$i$个按钮,需要支付$C_i$的钱,然后会跳出一份物品$i$。如果该物品卖完了,按下此按钮无效。 但是,这台售货机的电路连接出基环树DP
基环树DP Page1:问题 啥是基环树?就是在一棵树上增加一条边。 Page2:基环树的几种情况 无向 有向:基环外向树,基环内向树。 Page3:处理问题的基本方式 1.断环成树 2.分别处理树和环,之后就是考环形DP了。 Page4:如何找无向基环树的环? 无向图直接找环 Page5:基环内向树 首先它是一个有向图,Directed Roads CodeForces - 711D (基环外向树 )
ZS the Coder and Chris the Baboon has explored Udayland for quite some time. They realize that it consists of n towns numbered from 1 to n. There are n directed roads in the Udayland. i-th of them goes from town i to some other town ai (ai ≠ i). ZS the Cobzoj 4883 [Lydsy1705月赛]棋盘上的守卫 题解(思维,建图,最小基环森林)
原题链接: bzoj 题意简述 一个n∗mn*mn∗m的矩阵,要放n+mn+mn+m个守卫,每个守卫只能守住所在行或所在列(只能选择一个)。在i,ji,ji,j位置上放守卫的代价是w[i][j]w[i][j]w[i][j],求:守住所有行和列的最小代价和。 数据 输入 n m //行,列。n,m<=100000,但是注意 n*m<=100000!!! x x ...