图论中的环相关内容
并查集求最小环(无向图,出度只能为1):连一条由A指向B的边,更新B的父节点,A到它的父节点的路径长=B到它的父节点的路径长+1,如果有两个点祖先节点相同,那么就可以构成一个环,长度为两个点到祖先节点长度之和+1。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| int father(int x) { if(fa[x]==x) return x; int cur=fa[x]; int xf=father(fa[x]); fa[x]=xf; cnt[x]+=cnt[cur]; return xf; } void unite(int x,int y) { int xf=father(x),yf=father(y); if(xf==yf) ans=min(ans,cnt[x]+cnt[y]+1); else fa[xf]=yf, cnt[x]=cnt[y]+1; }
|
记忆化搜索求简单链+环