/*因为n非常大如果正常建边的话会超内存,每种状态的数目共2……10种状状体记录起来,源点与状态建边权值为状态数,状态与星球建边,星球与汇点建边*/
#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
#define inf 0x3fffffff
#define N 3000
struct node {
int u,v,w,next;
}bian[N*10*4];
int head[N],yong,s,t,dis[N];
void init(){
yong=0;
memset(head,-1,sizeof(head));
memset(dis,-1,sizeof(dis));
}
void addedge(int u,int v,int w) {
bian[yong].u=u;
bian[yong].v=v;
bian[yong].w=w;
bian[yong].next=head[u];
head[u]=yong++;
}
void bfs() {
int u,v,i;
queue<int>q;
q.push(t);
dis[t]=0;
while(!q.empty()) {
u=q.front();
q.pop();
for(i=head[u];i!=-1;i=bian[i].next) {
v=bian[i].v;
if(dis[v]==-1) {
dis[v]=dis[u]+1;
q.push(v);
}
}
}
return ;
}
int ISAP() {
int sum=0;
bfs();
int gap[N],cur[N],stac[N],top,i;
memset(gap,0,sizeof(gap));
for(i=s;i<=t;i++) {
gap[dis[i]]++;
cur[i]=head[i];
}
int k=s;
top=0;
while(dis[s]<t+1) {
if(k==t) {
int minn=inf,index;
for(i=0;i<top;i++) {
int e=stac[i];
if(minn>bian[e].w) {
minn=bian[e].w;
index=i;
}
}
for(i=0;i<top;i++) {
int e=stac[i];
bian[e].w-=minn;
bian[e^1].w+=minn;
}
sum+=minn;
top=index;
k=bian[stac[top]].u;
}
for(i=cur[k];i!=-1;i=bian[i].next) {
int v=bian[i].v;
if(bian[i].w&&dis[k]==dis[v]+1) {
cur[k]=i;
k=v;
stac[top++]=i;
break;
}
}
if(i==-1) {
int m=t+1;
for(i=head[k];i!=-1;i=bian[i].next)
if(m>dis[bian[i].v]&&bian[i].w) {
m=dis[bian[i].v];
cur[k]=i;
}
if(--gap[dis[k]]==0)break;
gap[dis[k]=m+1]++;
if(k!=s)
k=bian[stac[--top]].u;
}
}
return sum;
}
int main() {
int bit[N],n,m,i,j,k,tot[N],f;
bit[0]=1;
for(i=1;i<10;i++)
bit[i]=bit[i-1]*2;
while(scanf("%d%d",&n,&m)!=EOF) {
init();
s=0;t=1024+m+1;
memset(tot,0,sizeof(tot));
for(i=1;i<=n;i++) {
k=0;
for(j=0;j<m;j++) {
scanf("%d",&f);
k=k+f*bit[j];
}
tot[k]++;
}
for(i=0;i<1024;i++) {
if(tot[i]==0)continue;
addedge(s,i+1,tot[i]);
addedge(i+1,s,0);
for(j=0;j<10;j++)
if(i&bit[j]) {
addedge(i+1,1024+j+1,inf);
addedge(1024+j+1,i+1,0);
}
}
for(i=0;i<m;i++) {
scanf("%d",&f);
addedge(1024+i+1,t,f);
addedge(t,1024+i+1,0);
}
if(ISAP()==n)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}

最新文章

  1. Maven学习总结(一)——Maven入门——转载
  2. wordpress图片水印插件DX-Watermark
  3. 最新 Sublime Text3 激活码 (Build 3114 有效)
  4. Crashing Robots 分类: POJ 2015-06-29 11:44 10人阅读 评论(0) 收藏
  5. directdraw的多画面显示rgb
  6. 探究为何rem在chrome浏览器上计算出错
  7. Android(java)学习笔记177:BroadcastReceiver之 应用程序安装和卸载 的广播接收者
  8. android 补间动画
  9. J2SE知识点摘记(二十四)
  10. 恶补jquery(四)jquery中事件--冒泡
  11. JS实现等比例缩放图片
  12. 基于AFN封装的带缓存的网络请求
  13. Cookie Session 与Token
  14. Hibernate映射数据库中longtext类型属性时报错No Dialect mapping for JDBC type: -1的解决方案
  15. Vue父子组件生命周期
  16. Wince/VC高效PNG贴图,自定义Alpha算法
  17. AS的使用技巧
  18. poj 2185 Milking Grid
  19. An easier way to debug windows services
  20. tera term通过ttl脚本 自动连接服务器

热门文章

  1. bzoj2216
  2. 设计模式 |备忘录模式(memento)
  3. IOS上微信在输入框弹出键盘后,页面不恢复,下方有留白,有弹窗弹出时页面内容感应区域错位
  4. ACM_Reverse Bits(反转二进制)
  5. System.Data.SqlClient.SqlException: 在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。) .
  6. asp.net mvc 最简单身份验证 [Authorize]通过的标准
  7. c# winform控件dock属性停造位置、摆放顺序详解
  8. Appium Python API 汇总
  9. CSS学习笔记----选择器
  10. day09-文件的操作