BZOJ4205 : 卡牌配对
对于两张卡牌,如果存在两种属性值不互质,则可以匹配。
只考虑200以内的质数,一共有46个,可以新建3*46*46个点来表示一类属性值中有这两种质数的卡牌。
然后对于每张卡牌,枚举它的质因子,最多只有3个,如此建图求出最大流即可。
#include<cstdio>
const int N=66500,inf=~0U>>2,P=201;
struct edge{int t,f;edge*nxt,*pair;}*g[N],*d[N],pool[3500000],*cur=pool;
int n,m,i,j,x,y,z,S,T,h[N],gap[N],maxflow;
int v[P],fac[P][4],cnt,id12[P][P],id13[P][P],id23[P][P],all;
inline int min(int x,int y){return x<y?x:y;}
inline void add(int s,int t){
edge*p=cur++;p->t=t;p->f=1;p->nxt=g[s];g[s]=p;
p=cur++;p->t=s;p->f=0;p->nxt=g[t];g[t]=p;
g[s]->pair=g[t];g[t]->pair=g[s];
}
int sap(int v,int flow){
if(v==T)return flow;
int rec=0;
for(edge*p=d[v];p;p=p->nxt)if(h[v]==h[p->t]+1&&p->f){
int ret=sap(p->t,min(flow-rec,p->f));
p->f-=ret;p->pair->f+=ret;d[v]=p;
if((rec+=ret)==flow)return flow;
}
if(!(--gap[h[v]]))h[S]=T;
gap[++h[v]]++;d[v]=g[v];
return rec;
}
int main(){
for(i=2;i<P;i++)if(!v[i])for(cnt++,j=i;j<P;j+=i)v[j]=1,fac[j][++fac[j][0]]=cnt;
for(i=1;i<=cnt;i++)for(j=1;j<=cnt;j++)id12[i][j]=++all,id13[i][j]=++all,id23[i][j]=++all;
scanf("%d%d",&n,&m);S=all+n+m+1,T=S+1;
while(n--){
add(S,++all);
scanf("%d%d%d",&x,&y,&z);
for(i=1;i<=fac[x][0];i++)for(j=1;j<=fac[y][0];j++)add(all,id12[fac[x][i]][fac[y][j]]);
for(i=1;i<=fac[x][0];i++)for(j=1;j<=fac[z][0];j++)add(all,id13[fac[x][i]][fac[z][j]]);
for(i=1;i<=fac[y][0];i++)for(j=1;j<=fac[z][0];j++)add(all,id23[fac[y][i]][fac[z][j]]);
}
while(m--){
add(++all,T);
scanf("%d%d%d",&x,&y,&z);
for(i=1;i<=fac[x][0];i++)for(j=1;j<=fac[y][0];j++)add(id12[fac[x][i]][fac[y][j]],all);
for(i=1;i<=fac[x][0];i++)for(j=1;j<=fac[z][0];j++)add(id13[fac[x][i]][fac[z][j]],all);
for(i=1;i<=fac[y][0];i++)for(j=1;j<=fac[z][0];j++)add(id23[fac[y][i]][fac[z][j]],all);
}
for(gap[maxflow=0]=T,i=1;i<=T;i++)d[i]=g[i];
while(h[S]<T)maxflow+=sap(S,inf);
return printf("%d",maxflow),0;
}
BZOJ4205 : 卡牌配对的更多相关文章
- BZOJ4205卡牌配对——最大流+建图优化
题目描述 现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C.把卡牌分为X,Y两类,分别有n1,n2张. 两张卡牌能够配对,当且仅当,存在至多一项属性值使得两张卡牌该项属性值互质,且两张卡牌类别不 ...
- 【BZOJ4205】卡牌配对 最大流
[BZOJ4205]卡牌配对 Description 现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C.把卡牌分为X,Y两类,分别有n1,n2张. 两张卡牌能够配对,当且仅当,存在至多一项属性值 ...
- 【BZOJ4205】卡牌配对
Description 现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C.把卡牌分为X,Y两类,分别有n1,n2张. 两张卡牌能够配对,当且仅当,存在至多一项属性值使得两张卡牌该项属性值互质,且 ...
- [BZOJ4205][FJ2015集训]卡牌配对
题目:卡牌配对 传送门:None 题目大意:有$n_1$张$X$类牌和$n_2$张$Y$类类牌,每张卡牌上有三个属性值:$A,B,C$.两张卡牌能够配对,当且仅当,存在至多一项属性值使得两张卡牌该项属 ...
- BZOJ 4205: 卡牌配对
4205: 卡牌配对 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 173 Solved: 76[Submit][Status][Discuss] ...
- 刷题总结——卡牌配对(bzoj4205网络流)
题目: Description 现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C.把卡牌分为X,Y两类,分别有n1,n2张. 两张卡牌能够配对,当且仅当,存在至多一项属性值使得两张卡牌该项属性值 ...
- [BZOJ4205][FJ2015集训] 卡牌配对 [建图+最大流]
题面 这是bzoj权限题,题面可以去下面的离线题库找 离线4205,只有题面,不能提交 思路 二分图匹配 这道题模型显然就是个二分图匹配嘛 那我们两两判断一下然后连边匹配.....就只有30分了 因为 ...
- Unity3D_(游戏)卡牌01_启动屏界面
卡牌2D游戏展示 (游戏代码放到 卡牌04_游戏界面 文章最后面~) 游戏项目已托管到github上(里面有个32bit可执行文件) 传送门 规则 开始游戏每张卡牌初始翻开展示 展示几秒后卡牌 ...
- 使用UIKit制作卡牌游戏(三)ios游戏篇
译者: Lao Jiang | 原文作者: Matthijs Hollemans写于2012/07/13 转自朋友Tommy 的翻译,自己只翻译了这第三篇教程. 原文地址: http://www.ra ...
随机推荐
- Yii 自定义模型路径
例如现有两个 Yii 项目,分别是 test1 和 test2.在 test1 中,已经有模型了,test2 直接调用 test1 中的模型,其实添加个别名,然后修改下配置即可. 先在 index.p ...
- CMSZU站群管理系统 升级到 v1.8 [源码下载]
CmsZu 简介 CMSZU即CMS族,是个网站内容管理平台,基于PHP+MYSQL技术创建,源码开放. CmsZu 更新说明 V1.8 修改了些bug 完善数据库管理 -> 数据库表管理的 字 ...
- github for Mac 教程
Mac系统自带git,所有我们使用Mac搬的github客户端,无需安装git,所以使用github for Mac 超级简单,下载安装就好了. 1github for Mac 下载地址:https: ...
- shell脚本常用参数
shell 脚本 常用参数 #!/bin/sh # 在脚本第一行脚本头 # sh为当前系统默认shell,可指定为bash等shell sh -x # 执行过程 sh -n # 检查语法 (a=bbk ...
- Saving Tang Monk II
题目链接:http://hihocoder.com/contest/acmicpc2018beijingonline/problem/1 AC代码: #include<bits/stdc++.h ...
- Phantomjs 抓取、分析某个页面加载时浏览器发起的所有的子请求
var page = require('webpage').create(), system = require('system'), address; if (system.args.length ...
- React-Native 之 TabBarIOS
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- 2018-11-3& maven
https://www.cnblogs.com/clsn/p/7944116.html#auto_id_10 http://www.runoob.com/maven/maven-creating-pr ...
- spring boot JPA中实体类常用注解
spring boot jpa中的注解很多,参数也比较多.没必要全部记住,但是经常查看官方文档也比较麻烦,记录一下一些常用的注解.通过一些具体的例子来帮助记忆. @Entity @Table(name ...
- java 编译与运行
javac 编译 .java文件 javac file.java //将file.java 编译为 file.classjavac -d folder file.java //将file.java ...