对于两张卡牌,如果存在两种属性值不互质,则可以匹配。

只考虑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 : 卡牌配对的更多相关文章

  1. BZOJ4205卡牌配对——最大流+建图优化

    题目描述 现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C.把卡牌分为X,Y两类,分别有n1,n2张. 两张卡牌能够配对,当且仅当,存在至多一项属性值使得两张卡牌该项属性值互质,且两张卡牌类别不 ...

  2. 【BZOJ4205】卡牌配对 最大流

    [BZOJ4205]卡牌配对 Description 现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C.把卡牌分为X,Y两类,分别有n1,n2张. 两张卡牌能够配对,当且仅当,存在至多一项属性值 ...

  3. 【BZOJ4205】卡牌配对

    Description 现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C.把卡牌分为X,Y两类,分别有n1,n2张. 两张卡牌能够配对,当且仅当,存在至多一项属性值使得两张卡牌该项属性值互质,且 ...

  4. [BZOJ4205][FJ2015集训]卡牌配对

    题目:卡牌配对 传送门:None 题目大意:有$n_1$张$X$类牌和$n_2$张$Y$类类牌,每张卡牌上有三个属性值:$A,B,C$.两张卡牌能够配对,当且仅当,存在至多一项属性值使得两张卡牌该项属 ...

  5. BZOJ 4205: 卡牌配对

    4205: 卡牌配对 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 173  Solved: 76[Submit][Status][Discuss] ...

  6. 刷题总结——卡牌配对(bzoj4205网络流)

    题目: Description 现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C.把卡牌分为X,Y两类,分别有n1,n2张. 两张卡牌能够配对,当且仅当,存在至多一项属性值使得两张卡牌该项属性值 ...

  7. [BZOJ4205][FJ2015集训] 卡牌配对 [建图+最大流]

    题面 这是bzoj权限题,题面可以去下面的离线题库找 离线4205,只有题面,不能提交 思路 二分图匹配 这道题模型显然就是个二分图匹配嘛 那我们两两判断一下然后连边匹配.....就只有30分了 因为 ...

  8. Unity3D_(游戏)卡牌01_启动屏界面

      卡牌2D游戏展示 (游戏代码放到  卡牌04_游戏界面  文章最后面~) 游戏项目已托管到github上(里面有个32bit可执行文件) 传送门 规则 开始游戏每张卡牌初始翻开展示 展示几秒后卡牌 ...

  9. 使用UIKit制作卡牌游戏(三)ios游戏篇

    译者: Lao Jiang | 原文作者: Matthijs Hollemans写于2012/07/13 转自朋友Tommy 的翻译,自己只翻译了这第三篇教程. 原文地址: http://www.ra ...

随机推荐

  1. css拾遗(一)(inline-block,absolute)

    一:inline-block中不要嵌套其他block标签,不然会破坏布局 <style> .left{ float:left; } .hide{ display:none; } a{ di ...

  2. Codeforces 923 D. Picking Strings

    http://codeforces.com/contest/923/problem/D 题意: A-->BC , B-->AC , C-->AB , AAA-->empty 问 ...

  3. [转载]JavaScript 运行机制详解:再谈Event Loop

    https://app.yinxiang.com/shard/s8/sh/b72fe246-a89d-434b-85f0-a36420849b84/59bad790bdcf6b0a66b8b93d5e ...

  4. AngularJs -- ngMessages(1.3+)

    ngMessages(1.3+) 表单和验证是AngularJS中复杂的组件之一.用AngularJS默认的方式来写,不是特别好,不简洁. 在AngualrJS1.3发布前,表单验证必须以这种方式编写 ...

  5. 20155304 2016-2017-2 《Java程序设计》第七周学习总结

    20155304 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 1.时间的度量: 格林威治标准时间(GMT)通过观察太阳而得,其正午是太阳抵达天空最高点之时 ...

  6. Dream Spark ------spark on yarn ,yarn的配置

    <?xml version="1.0"?> <!-- Licensed under the Apache License, Version 2.0 (the &q ...

  7. linux常用运维命令【转】

    自己的小网站跑在阿里云的ECS上面,偶尔也去分析分析自己网站服务器日志,看看网站的访问量.看看有没有黑阔搞破坏!于是收集,整理一些服务器日志分析命令,大家可以试试! 1.查看有多少个IP访问: awk ...

  8. thymeleaf:字符串拼接+输出单引号

    代码: <a href="#" th:onclick="${'removeArticleImg('''+cmsImg.imgID+''')'}">删 ...

  9. nginx前后端分离路由配置

    参考链接: https://blog.csdn.net/qq_30021219/article/details/80901199

  10. /etc/sysconfig/network-scripts/下文件介绍

    我们先查看一下 [root@tpwb network-scripts]# ls ifcfg-eth0      ifdown-ipv6  ifup-aliases  ifup-plip    ifup ...