首页 > 其他分享 >暑假集训随笔

暑假集训随笔

时间:2024-10-24 14:49:20浏览次数:3  
标签:回边 最大 dfs 跨过 fa 暑假 集合 随笔 集训

1.关于二分图的判断:除了黑白染色法,还可以用扩展域并查集。所谓扩展域并查集就是假设每个点可能在集合1中也可能在集合2中,就把点i拆成i和i+n,分别代表在1和在2中的i。如果i和j不在同一集合中,就把i与j+n,以及j与i+n放在同一集合中。这样的好处是无论通过i还是j都可以拿到与它们在同一集合和不在同一集合的点的信息。三个点的情况也是一样的。可以看https://www.luogu.com.cn/problem/P1525
当把u与v连边时,看u与v是否在一个集合中,如在则说明不是二分图,否则把u+N与v放于同一集合,u与v+N放于同一集合

2.有了扩展域并查集,就能用线段树分治做https://www.luogu.com.cn/problem/P5787 了。所谓分治就是把时间作为区间信息放在线段树的节点上,当走入或走出区间时对当前状态进行更新。

3.https://codeforces.com/blog/entry/68138
讲了很多关于dfs树的事情。任何一条回边一定连接dfs树上的一个点和它的后代(而不可能是兄弟或者其他lca不等于这两个点之一的点)

关于dfs树的很好的性质:把边分成dfs边和回边,如果一条dfs边没有回边“跨过”它,那它就是桥。除了tarjan之外还可以用dp[u]求出跨过边(u,fa[u])的回边数量,为0的话(fa[u],u)就是一个桥。
考虑计算dp[u]:我们可以很轻松地统计出有多少回边是从u往上走的,这些回边都跨过了(fa[u],u),然后考虑来自u的后代的向上的回边,这些回边想跨过(fa[u],u)的话肯定跨过了\((v_i,u)\),其中v是u的儿子节点,这些边中只达到了u而没能往上走更高的边也跨过不了(fa[u],u),要把这些边减去。于是得到柿子
image

然后文章给出了一个例题:判断能不能给无向图的每一条边指定一个方向,使得图仍然强连通(即可从任意点到任意点)。答案是只要没有割边(桥)就可以。这是很好想的,但是构造方案可以很神奇地容易:回边都向上,dfs边都向下即可。

对于仙人掌图,即每个点(在某些定义中也可能是边,二者不等价)属于至多一个环。用dfs树即可通过一个回边和其连接的dfs链得到简单环

对于有向图,除了dfs边和回边之外还可能出现交叉边,这个边连接的x和y满足lca(x,y)!=x&&lca(x,y)!=y,这在无向图中是不存在的

4.最大权闭合子图
解决这样一类问题:给定一个图,每个点有可正可负的边权,现在选一个点集,如果一个点被选,它出发的边指向的点也必须被选,问点集的权的和最大可以是多少。
解决方法是网络流。源点向正权点连容量等于点权的边,负权点向终点连容量等于点权的相反数的边,然后点和点之间根据方向连容量为inf的边,答案为正权点的权值和减去最大流。
可以这么理解:考虑每个正权点,由于是最大流,它会努力把自己必选的点都流满,如果流满后有剩余,那这个剩余的就是选了这个点以及它指向的一系列的点所能提供的收益;如果流不满,它会全部流到终点。从答案上看,这对应得不偿失,不如不选的情况。

5.二分图最大权匹配
考虑使用最大费用最大流,但是最好的匹配的匹配数不一定等于最大匹配数,因此给每个左边的点连一个费用为0的边,这样图的最大流一定是最大匹配,看最大费用即可。

6.一般图最大匹配
https://oiwiki.com/graph/graph-matching/general-match/
7.

标签:回边,最大,dfs,跨过,fa,暑假,集合,随笔,集训
From: https://www.cnblogs.com/WXk-k/p/18328399

相关文章

  • 10.23随笔
    这里是10.23随笔。今天我又发现了一种不一样的解题方法,题是昨天的题,这个方法是迭代,代码留档:intdegreeOneNodesIterative(structTreeNode*root){if(root==NULL){return0;}intcount=0;structTreeNode*current;SqQueuequeue;InitQueue(&queue);EnQueue(&qu......
  • 新高一暑假第一期集训恢复性训练【数据结构-晚测】(并查集)(补)
    新高一暑假第一期集训恢复性训练【数据结构-晚测】(并查集)(补)[CF1290C]PrefixEnlightment带权扩展域并查集。任意三个子集的交集为空集,显然,一个点最多只能在两个集合中出现,这样所有集合的大小之和是\(\Theta(n)\)的。一个在两个集合中出现的点ii相当于连接了\(2\)个集合......
  • 杭州集训 Day 2
    课前由于昨晚打了ABC很坐牢所以多睡了一会6:30才起,酒店的饭又贵又难吃于是我们选择点外卖,但是早上的外卖都是\(20\)元起送,很麻烦,所以和htdlz拼了一单。花十块钱买了粥,没吃完,最后吃的hanss6的榨菜才咽下去。今天hs_black没有迟到,但是讲的题很抽象,六个小时讲二十多个......
  • 杭州集训 Day 1
    杭州集训Day1课前早上很早很早就起了,大概5:40吧,然后就感觉肚子疼。因为昨天晚上吃的喷射战士。在厕所足足待到6:00才出来。然后听了一会崩铁的演唱会回放,一直没来得及看,听了几首大概6:30收拾东西准备吃饭了。30元一顿的早饭,必须好好看看,结果啥也没有,素包子,“正宗烧麦”是......
  • 杭州集训 Day 3
    课前早饭htdlz帮忙买的,一碗粥和三个不知名的糕点,粥并不好喝,但是糕点好吃。早上到了机房把这儿的小破电脑换成了自己的笔记本,屏幕大一点舒服一些。hs_black走了,今天换syksykccc来讲,syk开朗幽默的多,上课和机房这群很有话题。而且他甚至把他讲的每个题对应的代码打了,然后课后......
  • 10.22随笔,二叉树求度为一的节点的个数
    今天去健身房锻炼了身体这是关于二叉树如何求度为一的节点的个数,同理还能求度为零和二的,不难。还又复习了一遍前序中序后续的遍历方法,已经可以由任意两种推出二叉树结构了,不过二叉树的样子和模式我还是有点不太能和代码结合去理解,还需要多加练习include<stdio.h>include<std......
  • NOIP2024集训Day58 字符串
    NOIP2024集训Day58字符串C.[CEOI2011]Matching发现要做的是排名串的匹配。考虑把它转成这个位置之前有多少个数小于当前这个数,这样就只要每个位置都对应相等的,那就一定是合法的。然后就可以类似KMP的预处理出一个\(nxt\)数组,然后再类似KMP的匹配。因为需要支持动态......
  • CSP2024 前集训:多校A层冲刺NOIP2024模拟赛11
    前言T1不知道啥是冒泡排序,理解了一会儿题面代码发现是啥意思了于是就签了。后面的题都不是很可做,T2、T4计数,T3高级玩意看不懂。但是T2有点可做,但我的DP不知道哪儿假了,暴力还打挂了,不然加个bitset就操过去了。T1冒泡排序\(i\)只能和\(i+k,i+2k,……\)换,对于每一......
  • P4247 [清华集训2012]序列操作
    题目描述有一个长度为\(n\)的序列,有三个操作:Iabc表示将\([a,b]\)这一段区间的元素集体增加\(c\);Rab表示将\([a,b]\)区间内所有元素变成相反数;Qabc表示询问\([a,b]\)这一段区间中选择\(c\)个数相乘的所有方案的和\(\mod19940417\)的值。对于100%的数据,\(n\leq500......
  • 【题解】Solution Set - NOIP2024集训Day58 字符串
    【题解】SolutionSet-NOIP2024集训Day58字符串https://www.becoder.com.cn/contest/5658「CF1466G」SongoftheSirens考虑对于\(s_i\),算钦定必须覆盖到\(t_i\)的匹配个数\(f_i\)。注意到\(s\)每次长度都会\(\times~2\)左右,其长度在\(O(\log|w|)\)的时候就......