BZOJ4205 卡牌配對

2021-09-07 01:30:44 字數 680 閱讀 1883

對於兩張卡牌,如果存在兩種屬性值不互質,則可以匹配。

只考慮200以內的質數,一共有46個,可以新建3*46*46個點來表示一類屬性值中有這兩種質數的卡牌。

然後對於每張卡牌,列舉它的質因子,最多只有3個,如此建圖求出最大流即可。

#includeconst int n=66500,inf=~0u>>2,p=201;

struct edge*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)

int sap(int v,int flow)

if(!(--gap[h[v]]))h[s]=t;

gap[++h[v]]++;d[v]=g[v];

return rec;

}int main()

while(m--)

for(gap[maxflow=0]=t,i=1;i<=t;i++)d[i]=g[i];

while(h[s]return printf("%d",maxflow),0;

}

bzoj4205 卡牌配對

卡牌配對 題目背景 bzoj4205 分析 我相信很多人第一反應都是暴力連邊然後暴力二分圖匹配,然後我的常數還沒有小到n2過 30000 所以我們來想想該怎麼辦,考慮到 200以內的質數只有 46個,我們可以選擇增加 3 46 46 個點,將左邊的某種屬性有第 i個質因數,另乙個屬性有第 j個質因數...

BZOJ4205 卡牌配對

現在有一種卡牌遊戲,每張卡牌上有三個屬性值 a,b,c。把卡牌分為x,y兩類,分別有n1,n2張。兩張卡牌能夠配對,當且僅當,存在至多一項屬性值使得兩張卡牌該項屬性值互質,且兩張卡牌類別不同。比如一張x類卡牌屬性值分別是225,233,101,一張y類卡牌屬性值分別為115,466,99。那麼這兩張...

BZOJ4205 卡牌配對(網路流)

現在有一種卡牌遊戲,每張卡牌上有三個屬性值 a,b,c。把卡牌分為x,y兩類,分別有n1,n2張。兩張卡牌能夠配對,當且僅當,存在至多一項屬性值使得兩張卡牌該項屬性值互質,且兩張卡牌類別不同。比如一張x類卡牌屬性值分別是225,233,101,一張y類卡牌屬性值分別為115,466,99。那麼這兩張...