bzoj 4405: [wc2016]挑战NPC【带花树】】的更多相关文章

https://www.lydsy.com/JudgeOnline/problem.php?id=4405 这道题大概就是考场上想不出来,想出来也调不出来的题. 把每个桶拆成三个互相有边的点,每个球向它连接的桶的三个点分别连边. 0球1桶,匹配数为1:1球1桶,匹配数为2:2球一桶,匹配数为2:3球一桶,匹配数为3: 发现每种半桶的情况下匹配数都比该桶中放的球数大1,那么ans=最大匹配数-球数. 带花树找lca的时候,记得是用每个点的总父亲找.带花树的细节真是恶心人. #include<ios…
带花树模板 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; inline int read() { int x;char c; '); +c-'; return x; } #define MN 600 #define ME 100000 #define ms(a) memset(a,0,sizeof(a)) +]; ],en,mat[MN+],nx[MN+],mk[M…
把每个筐子拆成3个,分别表示放0/1/2个,然后把这三个点两两连起来,每一个可以放在筐里的球都想这三个点连边. 这样可以发现,放0个球的时候,匹配数为1,放1个球的时候,匹配数为1,放2个球的时候,匹配数为2,放3个球的时候,匹配数为3. 所以直接把带花树的匹配数-n即可 #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; con…
[WC2016]挑战NPC(一般图最大匹配) Luogu 题解时间 思路十分有趣. 考虑一个筐只有不多于一个球才有1的贡献代表什么. 很明显等效于有至少两个位置没有被匹配时有1的贡献. 进而可以构造如下模型: 每个筐拆成三个点,三个点之间相互连边. 对于球可以匹配某个筐,将球向筐的三个点都连边. 这样一来,如果有一个筐只有不多于一个点被匹配,那么剩下的两个点可以自己匹配增加答案. 如此最终结果是 $ ans-n $ . 需要用到一般图最大匹配也即带花树. 由于答案要求输出匹配方案,所以要注意先匹…
来自FallDream的博客,未经允许,请勿转载,谢谢. 小N最近在研究NP完全问题,小O看小N研究得热火朝天,便给他出了一道这样的题目: 有n个球,用整数1到n编号.还有m个筐子,用整数1到m编号. 每个筐子最多能装3个球. 每个球只能放进特定的筐子中.具体有e个条件,第i个条件用两个整数vi和ui描述,表示编号为vi的球可以放进编号为ui的筐子中. 每个球都必须放进一个筐子中.如果一个筐子内有不超过1个球,那么我们称这样的筐子为半空的. 求半空的筐子最多有多少个,以及在最优方案中,每个球分别…
Sol 这做法我是想不到\(TAT\) 每个筐子拆成三个相互连边 球向三个筐子连边 然后跑一般图最大匹配 这三个筐子间最多有一个匹配 那么显然每个球一定会放在一个筐子里,一定有一个匹配 如果筐子间有匹配,则有一个半空的筐子,因为它一定只匹配了小于等于\(1\)个球 答案为匹配数\(-n\) 使答案最大即匹配数最大 上带花树就好了 # include <bits/stdc++.h> # define RG register # define IL inline # define Fill(a,…
uoj luogu bzoj sol 你可以列一个表格. 一个框子里放球的数量 0 1 2 3 对"半空框子"数量的贡献 1 1 0 0 把一个框子拆三个点.两两之间连边. 会发现,如果这三个点里一个都没有被球匹配掉,那么这三个点的最大匹配数是\(1\):如果任意一个点被一个球匹配掉了,那么剩下两个点一定可以匹配,所以最大匹配数还是\(1\):有两个点或者是三个点被匹配后最大匹配就是\(0\). 所以,按如上方式建图,每个球向它可以放进的框子对应的的三个点都连边.跑出最大匹配后输出\(…
[BZOJ4405][WC2016]挑战NPC(带花树) 题面 BZOJ 洛谷 Uoj Description 小N最近在研究NP完全问题,小O看小N研究得热火朝天,便给他出了一道这样的题目: 有n个球,用整数1到n编号.还有m个筐子,用整数1到m编号. 每个筐子最多能装3个球. 每个球只能放进特定的筐子中.具体有e个条件,第i个条件用两个整数vi和ui描述,表示编号为vi的球可以放进编号为ui的筐子中. 每个球都必须放进一个筐子中.如果一个筐子内有不超过1个球,那么我们称这样的筐子为半空的.…
正题 题目链接:https://www.luogu.com.cn/problem/P4258 题目大意 给出\(n\)个球,\(m\)个篮筐,每个球都可以被放入一些特定的篮筐,每个球都要放,要求球的个数小于等于\(1\)的篮筐数量最多. 保证有解,输出方案. \(1\leq T\leq 5,1\leq n\leq 3m,1\leq m\leq 100\) 解题思路 额其实做题之前已经知道正解是带花树就简单很多了. 每个篮筐我们开一个三个点的环,那么如果环上大于一个点呗匹配掉了那么这个环内就无法匹…
「WC2016」挑战NPC 解题思路 这个题建图非常厉害,带花树什么的只会口胡根本写不动,所以我写了机房某大佬教我的乱搞. 考虑把一个筐 \(x\) 拆成 \(x1,x2,x3\) 三个点,且这三个点相互连边,每对球和筐的连边都让球和筐拆出的三个点连边,这样如果筐内部的点存在一个匹配,那么这个筐就是半空的,所以我们需要先将球匹配完,然后不断尝试增广来自筐的点,每一次成功增广都使得答案 \(+1\) ,一般图最大匹配跑跑就好了. 下面的代码随时可能在 \(\text{uoj}\) 上变成 \(\t…