带花树模板

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
inline int read()
{
int x;char c;
while((c=getchar())<''||c>'');
for(x=c-'';(c=getchar())>=''&&c<='';)x=x*+c-'';
return x;
}
#define MN 600
#define ME 100000
#define ms(a) memset(a,0,sizeof(a))
struct edge{int nx,t;}e[ME*+];
int h[MN+],en,mat[MN+],nx[MN+],mk[MN+],f[MN+],q[MN+],qn,u[MN+],cnt;
inline void ins(int x,int y)
{
e[++en]=(edge){h[x],y};h[x]=en;
e[++en]=(edge){h[y],x};h[y]=en;
}
int gf(int k){return f[k]?f[k]=gf(f[k]):k;}
int lca(int x,int y)
{
for(++cnt;;swap(x,y))if(x)
{
x=gf(x);
if(u[x]==cnt)return x;
u[x]=cnt;
x=nx[mat[x]];
}
}
void group(int x,int r)
{
while(x!=r)
{
int a=mat[x],b=nx[a];
if(gf(b)!=r)nx[b]=a;
if(mk[a]>)mk[q[++qn]=a]=;
if(mk[b]>)mk[q[++qn]=b]=;
if(gf(x)!=gf(a))f[gf(x)]=gf(a);
if(gf(a)!=gf(b))f[gf(a)]=gf(b);
x=b;
}
}
bool aug(int x)
{
int i,j,y,r;
ms(nx);ms(mk);ms(f);
for(mk[q[i=qn=]=x]=;i<=qn;++i)for(j=h[x=q[i]];j;j=e[j].nx)
{
y=e[j].t;
if(mat[x]==y||gf(x)==gf(y)||mk[y]>)continue;
if(mk[y])
{
r=lca(x,y);
if(gf(x)!=r)nx[x]=y;
if(gf(y)!=r)nx[y]=x;
group(x,r);group(y,r);
}
else if(!mat[y])
{
for(nx[y]=x,i=y;i;i=y)
{
x=nx[i];y=mat[x];
mat[i]=x;mat[x]=i;
}
return true;
}
else
{
nx[y]=x;mk[y]=;
mk[q[++qn]=mat[y]]=;
}
}
return false;
}
int main()
{
int T=read(),n,m,e,x,y;
while(T--)
{
n=read();m=read();e=read();
ms(h);en=;ms(mat);
for(x=;x<=m;++x)ins(n+(x-)*+,n+(x-)*+);
while(e--)
{
x=read();y=read();
ins(x,n+(y-)*+);
ins(x,n+(y-)*+);
ins(x,n+(y-)*+);
}
for(x=,y=-n;x<=n+*m;++x)if(!mat[x]&&aug(x))++y;
printf("%d\n",y);
}
}

[BZOJ]4405: [wc2016]挑战NPC(带花树)的更多相关文章

  1. BZOJ 4405 [wc2016]挑战NPC 带花树 一般图最大匹配

    https://www.lydsy.com/JudgeOnline/problem.php?id=4405 这道题大概就是考场上想不出来,想出来也调不出来的题. 把每个桶拆成三个互相有边的点,每个球向 ...

  2. bzoj 4405: [wc2016]挑战NPC【带花树】

    把每个筐子拆成3个,分别表示放0/1/2个,然后把这三个点两两连起来,每一个可以放在筐里的球都想这三个点连边. 这样可以发现,放0个球的时候,匹配数为1,放1个球的时候,匹配数为1,放2个球的时候,匹 ...

  3. [WC2016]挑战NPC(一般图最大匹配)

    [WC2016]挑战NPC(一般图最大匹配) Luogu 题解时间 思路十分有趣. 考虑一个筐只有不多于一个球才有1的贡献代表什么. 很明显等效于有至少两个位置没有被匹配时有1的贡献. 进而可以构造如 ...

  4. [bzoj4405][wc2016]挑战NPC

    来自FallDream的博客,未经允许,请勿转载,谢谢. 小N最近在研究NP完全问题,小O看小N研究得热火朝天,便给他出了一道这样的题目: 有n个球,用整数1到n编号.还有m个筐子,用整数1到m编号. ...

  5. [WC2016]挑战NPC

    Sol 这做法我是想不到\(TAT\) 每个筐子拆成三个相互连边 球向三个筐子连边 然后跑一般图最大匹配 这三个筐子间最多有一个匹配 那么显然每个球一定会放在一个筐子里,一定有一个匹配 如果筐子间有匹 ...

  6. [UOJ171][WC2016]挑战NPC

    uoj luogu bzoj sol 你可以列一个表格. 一个框子里放球的数量 0 1 2 3 对"半空框子"数量的贡献 1 1 0 0 把一个框子拆三个点.两两之间连边. 会发现 ...

  7. 【BZOJ4405】【WC2016】挑战NPC(带花树)

    [BZOJ4405][WC2016]挑战NPC(带花树) 题面 BZOJ 洛谷 Uoj Description 小N最近在研究NP完全问题,小O看小N研究得热火朝天,便给他出了一道这样的题目: 有n个 ...

  8. P4258-[WC2016]挑战NPC【带花树】

    正题 题目链接:https://www.luogu.com.cn/problem/P4258 题目大意 给出\(n\)个球,\(m\)个篮筐,每个球都可以被放入一些特定的篮筐,每个球都要放,要求球的个 ...

  9. 「WC2016」挑战NPC

    「WC2016」挑战NPC 解题思路 这个题建图非常厉害,带花树什么的只会口胡根本写不动,所以我写了机房某大佬教我的乱搞. 考虑把一个筐 \(x\) 拆成 \(x1,x2,x3\) 三个点,且这三个点 ...

随机推荐

  1. Beta冲刺NO.5

    Beta冲刺 第五天 1. 昨天的困难 1.昨天的困难主要是在类的整理上,一些逻辑理不清,也有一些类写的太绝对了,扩展性就不那么好了,所以,昨天的困难就是在重构上. 页面结构太凌乱,之前没有统筹好具体 ...

  2. vue2.X简单翻页/分页

    由于业务需要 公司把后台所有数据一次性给前端,数据过多,所以前端需要做一些分页的处理,比较简单的翻页. html代码 <table class="three_td"> ...

  3. python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...

  4. SUN平台服务器光纤共享存储互斥失败如何恢复数据?

    服务器数据恢复故障描述: 服务器最初的设计思路为将两台SPARC SOLARIS系统通过光纤交换机共享同一存储作为CLUSTER使用,正常情况下A服务器工作,当A服务器发生故障宕机后即可将其关机然后开 ...

  5. Mego(06) - 关系数据库建模

    框架中提供了多种数据注释以便可以全面的描述数据库结构特性. 自增列 可以使用注释声明指定列是数据库自增列,同时能指定自增的起始及步长. public class Blog { [Identity(, ...

  6. ( 转 ) CORS 有一次 OPTIONS 请求的原理

    刚接触前端的时候,以为HTTP的Request Method只有GET与POST两种,后来才了解到,原来还有HEAD.PUT.DELETE.OPTIONS-- 目前的工作中,HEAD.PUT.DELE ...

  7. Vue2学习小记-给Vue2路由导航钩子和axios拦截器做个封装

    1.写在前面 最近在学习Vue2,遇到有些页面请求数据需要用户登录权限.服务器响应不符预期的问题,但是总不能每个页面都做单独处理吧,于是想到axios提供了拦截器这个好东西,再于是就出现了本文. 2. ...

  8. gradle入门(1-6)将Java项目从maven迁移到gradle

    gradle项目与maven项目相互转化(转) 转自: http://www.cnblogs.com/yjmyzz/p/gradle-to-maven.html 一.maven项目->gradl ...

  9. Spring Security 入门(3-10)Spring Security 的四种使用方式

    原文链接: http://www.360doc.com/content/14/0724/17/18637323_396779659.shtml 下面是作者的一个问题处理

  10. 记录java/javascript让浮点数显示两位小数的方法

    参考:http://www.jb51.net/article/46010.htm 另,如果只是要在页面层展示的时候,显示为两位小数,也可以直接改前端js代码. item.turnoverRate = ...