【WC2016】挑战NPC 【带花树】【建图】

传送门

题意:有nnn个球和mmm个筐,每个筐最多放333个球,每个球只能放入特定的一些筐中,在题中给出。构造一种放球的方案使得nnn个球都被放在某个筐中且 球的个数不超过111 的筐的数量尽量大。

m≤100,n≤3mm\leq 100,n\leq 3mm100,n3m

把每个筐拆成 333 个点,并每个筐的三个点两两之间连边。

每个球和可以放的筐的三个点都连上边。

然后跑一般图最大匹配。

这样如果一个筐的333个点被匹配的点不超过111,可以找两个点自己匹配。

而每个球都可以且必须找一个匹配,所以最终答案是最大匹配−n最大匹配-nn

一个很坑的地方,最大匹配的时候球不一定都有匹配,输出方案时会出锅。解决方法是先从球开始增广,这样每个球先找到匹配点,这样最后一定有匹配。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cctype>
#include <queue>
#include <cassert>
#define MAXN 1005
#define MAXM 1000005
using namespace std;
inline int read()
{int ans=0;char c=getchar();while (!isdigit(c)) c=getchar();while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();return ans;
}
struct edge{int u,v;}e[MAXM];
int head[MAXN],nxt[MAXM],cnt;
void addnode(int u,int v)
{e[++cnt]=(edge){u,v};nxt[cnt]=head[u];head[u]=cnt;
}
inline void insert(int u,int v){addnode(u,v),addnode(v,u);}
int mat[MAXN],pre[MAXN],col[MAXN],fa[MAXN],N;
int idx[MAXN],tot;
int find(const int& x){return fa[x]==x? x:fa[x]=find(fa[x]);}
queue<int> q;
inline int lca(int x,int y)
{for (++tot;;swap(x,y))if (x){x=find(x);if (idx[x]==tot) return x;idx[x]=tot,x=pre[mat[x]];}
}
inline void shrink(int x,int y,int l)
{while (find(x)!=l){pre[x]=y,y=mat[x];if (col[y]==2) col[y]=1,q.push(y);if (x==find(x)) fa[x]=l;if (y==find(y)) fa[y]=l;x=pre[y];}
}
inline int bfs(int s)
{for (int i=1;i<=N;i++) pre[i]=col[i]=0,fa[i]=i;col[s]=1;while (!q.empty()) q.pop();q.push(s);while (!q.empty()){int u=q.front();q.pop();for (int i=head[u];i;i=nxt[i]){int v=e[i].v;if (find(u)==find(v)||col[v]==2) continue;if (!col[v]){col[v]=2,pre[v]=u;if (!mat[v]){for (int las;v;v=las)las=mat[pre[v]],mat[v]=pre[v],mat[pre[v]]=v;return 1;}col[mat[v]]=1,q.push(mat[v]);}else{int l=lca(u,v);shrink(u,v,l),shrink(v,u,l);}}}return 0;
}
int main()
{for (int T=read();T;T--){memset(head,0,sizeof(head));memset(nxt,0,sizeof(nxt));cnt=0;memset(mat,0,sizeof(mat));tot=0;memset(idx,0,sizeof(idx));int n,m,e;n=read(),m=read(),e=read();N=3*m+n;for (int i=1;i<=m;i++) insert(i,i+m),insert(i,i+2*m),insert(i+m,i+2*m);for (int i=1;i<=e;i++){int v,u;v=read(),u=read();insert(3*m+v,u);insert(3*m+v,u+m);insert(3*m+v,u+2*m);}int ans=0;for (int i=N;i>=1;i--)if (!mat[i])ans+=bfs(i);printf("%d\n",ans-n);for (int i=3*m+1;i<=N;i++) printf("%d%c",(mat[i]-1)%m+1," \n"[i==N]);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P4103 [HEOI2014]大工程 虚树 + dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 简化一下题意就是求树上给定点集中每两个点之间的距离之和&#xff0c;相距最远的点&#xff0c;相距最近的点。 对于距离和我们统计一下边的贡献就好啦&#xff0c;边两头的sizesizesize乘…

【翻译】Keras.NET简介 - 高级神经网络API in C#

用C#&#xff0c;远离996Keras.NETKeras.NET是一个高级神经网络API&#xff0c;它使用C#编写&#xff0c;并带有Python绑定&#xff0c;可以在Tensorflow、CNTK或Theano上运行。其关注点是实现快速实验。因为做好研究的关键是&#xff1a;能在尽可能短的时间内从一个想法发展出…

TIOBE 6月排行:C# 以微弱的优势超过了 Visual Basic .NET 的排名,再次进入 TOP 5

月经贴警告……TIOBE 编程语言排行榜 7 月更新已公布&#xff0c;排名前十的分别是&#xff1a;Java, C, Python, C, C#, Visual Basic .NET, JavaScript, PHP, SQL 和汇编语言。和上个月的不同之处主要是 C# 以微弱的优势超过了 Visual Basic .NET 的排名&#xff0c;再次进入…

ETT学习笔记

ETT&#xff08;Eular Tour Tree&#xff09;是一种维护有根树的数据结构&#xff0c;支持以下操作 修改一个点的点权子树修改单点查询点到根路径查询修改一个点的父亲 据说可以支持换根&#xff0c;但用的不多而且据说很难写&#xff0c;所以似乎失传了&#xff08; 其实没…

Codeforces Round #635 (Div. 2) D. Xenia and Colorful Gems 暴力 + 二分

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你三个数组a,b,ca,b,ca,b,c&#xff0c;让你从每个数组中选择一个数x,y,zx,y,zx,y,z&#xff0c;使得(x−y)2(x−z)2(y−z)2(x-y)^2(x-z)^2(y-z)^2(x−y)2(x−z)2(y−z)2最小&#xff0c;求这个最小值。 …

用.NET Core实现一个类似于饿了吗的简易拆红包功能

需求说明以前很讨厌点外卖的我&#xff0c;最近中午经常点外卖&#xff0c;因为确实很方便&#xff0c;提前点好餐&#xff0c;算准时间&#xff0c;就可以在下班的时候吃上饭&#xff0c;然后省下的那些时间就可以在中午的时候多休息一下了。点餐结束后&#xff0c;会有一个好…

【POI2011】LIZ-Lollipop 【构造】

传送门 题意&#xff1a;给一个长度为nnn的只有111和222的序列&#xff0c;多次询问给定xxx构造或判断无法构造一个区间和为xxx 注意到111和222实质上是改不改变奇偶性&#xff0c;所以往这上面考虑 我们发现如果一个区间[L,R][L,R][L,R]和为x(x>2)x(x>2)x(x>2),我…

kubernetes实战篇之helm示例yaml文件文件详细介绍

前面完整示例里,我们主要讲解helm打包,部署,升级,回退等功能,关于这里面的文件只是简单介绍,这一节我们详细介绍一下这里面的文件,以方便我们参照创建自己的helm chart.Helm Chart 结构Chart 目录结构mychart/ Chart.yaml LICENSE README.md values.yaml requirements.yam…

P4309 [TJOI2013]最长上升子序列 平衡树 + dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 注意到一个很关键的条件&#xff0c;每次插入iii&#xff0c;而iii是递增的&#xff0c;也就是说插入iii之后只会从前面的最大值转移过来&#xff0c;所以我们现在只需要维护插入操作即可&…

【AGC035C】Skolem XOR Tree【异或】【构造】

传送门 题意&#xff1a;给定nnn&#xff0c;构造或判断无法构造一个2n2n2n个结点的树&#xff0c;其中结点iii和ininin的权值为iii,且所有iii和ininin路径权值异或和等于iii。 注意到 2i⊕2i112i\oplus2i112i⊕2i11&#xff0c;然后可以脑补出 然而111没处理 发现1⊕2⊕301\…

ASP.NET Core 管道再探

几乎任何服务器端处理环境都有自己的直通组件管道&#xff0c;用于检查、重路由或修改传入请求和传出响应。经典 ASP.NET 围绕 HTTP 模块理念进行排列&#xff0c;而 ASP.NET Core 采用基于中间件组件的更现代的体系结构。最终目的是相同的 - 允许可配置的外部模块以请求&#…

GRPC与.net core

QQ讨论群&#xff1a;953553560正文系列章节GRPC与.net coreGRPC截止时间与元数据GRPC与netcore IdentityGRPC与netcore IdentityServer4概述GRPC的数据交互模式有&#xff1a;1.单项RPC&#xff0c;最简单的数据交换方式&#xff0c;客户端发出单个请求&#xff0c;收到单个响…

【Hitachi2020C】ThREE【构造】【二分图染色】

传送门 题意&#xff1a;给一棵nnn个结点的树&#xff0c;构造一个nnn阶排列ppp&#xff0c;使得所有距离为333的点对(i,j)(i,j)(i,j)满足pipjp_ip_jpi​pj​和pipjp_ip_jpi​pj​至少一个为333的倍数。 分析一下&#xff0c;这个条件等价于所有距离333的点对点权对三取模后不…

【HNOI2015】接水果【整体二分】【DFS序】【双区间转矩形】【扫描线】【树状数组】

传送门 题意&#xff1a;给定一个nnn个点的树&#xff0c;定义一个“盘子”为一个给定权值的路径&#xff0c;一个“水果”为一条路径&#xff0c;一个盘子可以接到水果当且仅当盘子的路径是水果的子路径。给出所有盘子和水果&#xff0c;对于每个水果求可以接它的盘子中第kik…

程序员修神之路--做好分库分表其实很难之一

点击上方“蓝字”带你去看小星星菜哥&#xff0c;领导让我开发新系统了这么说领导对你还是挺信任的呀~必须的&#xff0c;为了设计好这个新系统&#xff0c;数据库设计我花了好多心思呢做一个系统我觉得不应该从数据库入手&#xff0c;应该从设计业务模型开始&#xff0c;先不说…

【CF1311E】Construct the Binary Tree【增量构造】【复杂度证明】

题意&#xff1a;给定nnn和ddd&#xff0c;构造或判断无法构造一棵二叉树使得所有点的深度&#xff08;定义为到根距离&#xff09;之和为ddd。 n,d≤5000n,d\leq 5000n,d≤5000 显然可以算出有解的ddd的下界和上界&#xff0c;分别是完全二叉树和链的情况。下面会证明在这个范…

Office 365开发者的前端必备课程

这篇文章其实不仅仅是写给Office 365开发者的&#xff0c;但对于广大的Office 365开发者来说确实相当重要的。这里提到的Office 365开发者&#xff0c;包括了Office Add-ins&#xff0c;SharePoint Add-ins&#xff0c;Microsoft Graph&#xff0c;Microsoft Teams的开发者。我…

【CF1338C】Perfect Triples【位运算】【构造】

传送门 题意&#xff1a;有一序列SSS由下列方式生成&#xff1a; 找到字典序最小的正整数(a,b,c)(a,b,c)(a,b,c)&#xff0c;满足a,b,ca,b,ca,b,c不在SSS中且a⊕b⊕c0a\oplus b\oplus c0a⊕b⊕c0,其中⊕\oplus⊕为异或将a,b,ca,b,ca,b,c加入SSS重复第一步 TTT组数据&#xff…

.NET开发框架(五)-IIS上部署ASP.NET Core项目教程

在之前教程中&#xff0c;我们分享了框架的功能与视频演示介绍(文尾底部提供往期教程快捷链接)系列教程&#xff1a;从初学者到架构师的一步步蜕变本篇经验将和大家介绍如何在IIS上部署ASP.NET Core项目&#xff0c;希望对初学.NET CORE的童靴入门有所帮助&#xff01;1、打开V…

P4146 序列终结者 平衡树 + lazy维护

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 平衡树裸题&#xff0c;直接维护俩lazylazylazy就行了。 需要注意的是&#xff0c;只有儿子节点存在的时候才能更新&#xff0c;不然更新到000号节点之后&#xff0c;给000号点加上了奇怪的…