hdu 3605 最大流sap+二进制思想(啊啊)
/*因为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;
}
hdu 3605 最大流sap+二进制思想(啊啊)的更多相关文章
- hdu 4280 最大流sap
模板套起来 1 5 7 //5个结点,7个边 3 3 //坐标 3 0 3 1 0 0 4 5 1 3 3 //相连的结点和流 2 3 4 2 4 3 1 5 6 4 5 3 1 4 4 3 4 2 ...
- hdu 4280 最大流 sap模板
给你岛的坐标求最西边到最东边的最大流 /* 最大流模板 sap */ #include<stdio.h> #include<string.h> #include<algo ...
- HDU 3605 最大流+状态压缩
Escape Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- HDU 3605 Escape(状压+最大流)
Escape Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Sub ...
- HDU 3605 Escape (网络流,最大流,位运算压缩)
HDU 3605 Escape (网络流,最大流,位运算压缩) Description 2012 If this is the end of the world how to do? I do not ...
- Hdu 3605 Escape (最大流 + 缩点)
题目链接: Hdu 3605 Escape 题目描述: 有n个人要迁移到m个星球,每个星球有最大容量,每个人有喜欢的星球,问是否所有的人都能迁移成功? 解题思路: 正常情况下建图,不会爆内存,但是T ...
- hdu 4289 最大流拆点
大致题意: 给出一个又n个点,m条边组成的无向图.给出两个点s,t.对于图中的每个点,去掉这个点都需要一定的花费.求至少多少花费才能使得s和t之间不连通. 大致思路: 最基础的拆点最大 ...
- HDU 1532 最大流入门
1.HDU 1532 最大流入门,n个n条边,求第1点到第m点的最大流.只用EK做了一下. #include<bits/stdc++.h> using namespace std; #pr ...
- Python12/11--盒子的显隐/布局/z-index/流式布局思想
1.盒子的显隐 display:none 在页面中不占位,采用定位布局后,显示隐藏都不会影响其他标签,不需要用动画处理时,一般用这个 opacoity : 0 在页面中占位,采 ...
随机推荐
- Luogu3674小清新人渣的本愿
https://zybuluo.com/ysner/note/1109536 题面 给你一个序列a,长度为n,有m次操作,每次询问一个区间 是否可以选出两个数它们的差为x 是否可以选出两个数它们的和为 ...
- Mysql 数据库编码问题
数据库建表后,插入数据,如果数据位汉子,将提示错误:“incorrect string value....”. 解决方法:改变数据库编码 第一种方法:改变database 编码: alter data ...
- E20170916-hm
sassy adj. 无礼的; 漂亮的; <非正,美> <贬>粗鲁的; <褒>时髦的; digest vt. 消化; 整理; compressor n. 压气 ...
- css的一些命名规范
网页制作中规范使用DIV+CSS命名规则,可以改善优化功效特别是团队合作时候可以提供合作制作效率,具体DIV CSS命名规则CSS命名大全内容篇. 常用DIV+CSS命名大全集合,即CSS命名规则 D ...
- VUE移动端禁止双手放大缩小
//index.html <meta name="viewport" content="width=device-width,initial-scale=1.0,u ...
- GoLang 编译exe添加ICO图标
我们在做Go开发的时候在Window平台下编译出来的exe后大部分都是没有图标,看起来很难看.下面我们说下如何添加一个图标. 1.首先在根目录下,exe的同级目录下创建.rc文件, IDI_ICON1 ...
- Spring中常用的注解,你知道几个呢?
今天给大家分享下Spring中一般常用的注解都有哪些.可能很多人做了很长是了但有些还是不知道一些注解,不过没有关系,你接着往下看. Spring部分 1.声明bean的注解 @Component 组件 ...
- Spring思维课程导图——bean得实例化和bean的管理
- JAVA中list,set,map与数组之间的转换详解
package test; import java.util.*; /** * Created by ming */ public class Test { public static void ma ...
- 为什么现在改用int.TryParse了
以前一直用 int.Parse(x)或者 Convert.ToInt64(x),后来项目中发现如果x变量的值为null是,就报错了,哪怕我这样写 int.Parse(x=x??"0" ...