[Codeforces 808F] [二分] [最小割] Card Game
来源:互联网 发布:淘宝买二手手机可靠吗 编辑:程序博客网 时间:2024/06/04 20:11
题意大概就是选一些物品,这个物品魔力值的两两之和为合数,物品等级要小于你的等级,求你最小的等级,可以选出这样的一些物品使这些物品能力值之和>=k。
首先可以二分答案,然后就变成最小割的经典模型
魔力值为奇数的向源点连边,偶数向汇点连边,魔力值之和为合数的两个物品之间连边
#include <cstdio>#include <iostream>#include <algorithm>#include <string>#include <cstring>#include <queue>#define N 110#define inf 1<<30using namespace std;int n,k,cnt,g,S,T;int p[N],c[N],l[N],a[N],G[N],dis[N],cur[N];int ip[200010];struct edge{ int t,nx,f;}E[N*N*4];queue<int> Q;inline void add(int x,int y,int w){ E[++cnt].t=y; E[cnt].nx=G[x]; E[cnt].f=w; G[x]=cnt; E[++cnt].t=x; E[cnt].nx=G[y]; E[cnt].f=0; G[y]=cnt;}inline bool bfs(){ for(int i=1;i<=n+1;i++) dis[i]=-1; dis[S]=0; while(!Q.empty()) Q.pop(); Q.push(S); while(!Q.empty()){ int x=Q.front(); Q.pop(); for(int i=G[x];i;i=E[i].nx) if(dis[E[i].t]==-1&&E[i].f){ dis[E[i].t]=dis[x]+1; if(E[i].t==T) return 1; Q.push(E[i].t); } } return 0;}int dfs(int x,int f){ if(x==T||f==0) return f; int used=0,w; for(int &i=cur[x];i;i=E[i].nx) if(E[i].f&&dis[E[i].t]==dis[x]+1){ w=dfs(E[i].t,min(f-used,E[i].f)); E[i].f-=w; E[i^1].f+=w; if((used+=w)==f) return f; } if(!used) dis[x]=-1; return used;}int main(){ freopen("1.in","r",stdin); freopen("1.out","w",stdout); for(int i=2;i<=200000;i++) if(!ip[i]) for(int j=i+i;j<=200000;j+=i) ip[j]=1; scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d%d%d",&p[i],&c[i],&l[i]); int L=1,R=100,mid,ans=-1; while(L<=R){ memset(G,0,sizeof(G)); mid=L+R>>1; g=0; cnt=1; int mx=-1,mxn; for(int i=1;i<=n;i++) if(l[i]<=mid&&c[i]==1&&p[i]>mx) mx=p[i],mxn=i; for(int i=1;i<=n;i++) if(l[i]<=mid&&(c[i]>1||i==mxn)) a[++g]=i; S=0; T=g+1; for(int i=1;i<=g;i++) if(c[a[i]]&1) add(S,i,p[a[i]]); else add(i,T,p[a[i]]); for(int i=1;i<=g;i++) if(c[a[i]]&1) for(int j=1;j<=g;j++) if((~c[a[j]]&1)&&!ip[c[a[i]]+c[a[j]]]) add(i,j,inf); int v=0; for(int i=1;i<=g;i++) v+=p[a[i]]; while(bfs()){ for(int i=0;i<=g+1;i++) cur[i]=G[i]; v-=dfs(S,inf); } if(v>=k) R=(ans=mid)-1; else L=mid+1; } printf("%d\n",ans); return 0;}
阅读全文
0 0
- [Codeforces 808F] [二分] [最小割] Card Game
- Codeforces 808F Card Game【思维建图+最小割】
- Codeforces 808F Card Game
- Codeforces 808F Card Game(和是素数二分图建图+二分图带权最大独立集)
- 【Codeforces 808F】【网络流】Card Game 题解
- Codeforces 808F 网络流最小割(二分图最大点权独立集) 解题报告
- Codeforces Educational Round#21 F(808F) Solution:网络流(最小割)
- F(1911)Card Game
- F. Card Game
- Codeforces Gym 101128F (UVA Live 7277) Landscaping 最小割
- 【ASC44】F - Funny Card Game
- HDU3657 Game(最小割)
- Codeforces---Fox and Card Game
- Appleman and Card Game CodeForces
- Fox and Card Game CodeForces
- HDOJ 题目1528 Card Game Cheater(二分图最小点覆盖)
- hdu 3657 Game 最小割
- hdu 3657 Game(最小割)
- (三)Struts1.x高级应用
- Linux基础学习笔记之time命令、strace命令、ltrace命令
- 利用优先级队列生成 哈夫曼树
- JavaScript BOM基础笔记(2017/06/05)
- DHT12温湿度传感器IIC,I2C接口调试心得和代码说明
- [Codeforces 808F] [二分] [最小割] Card Game
- 吴晓波听后感
- CSS实现垂直居中水平居中的绝对定位居中技术
- 蓝牙加密【DATA SIGNING】【SECURITY MODES】【SECURITY COMMAND FORMAT】【主机加密流程】【加密流程】【Bonding Procedure】
- 解决windows7窗口显示缓慢问题
- 基于普通IO流的小说管理系统
- html表格
- 浏览器内部工作原理
- 数组