HDU 3605Escape(缩点+网络流之最大流)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3605

本来打算昨天写两道题的,结果这个题卡住了,最后才发现是最后的推断条件出错了,推断满流的条件应该是与n的比較,居然写成与全部星球总容量的比較了。(近期大脑短路。。)

这题也不是全然自己想的,没想到缩点这一技巧,由于n的数据范围太大,普通的建图方法会超时超内存,须要缩点,由于对于每一个点来说,一共仅仅有2^10种方法,而最多一共同拥有10W个点,显然有非常多点是反复的,这时能够採取缩点的方法,将反复的当成一个点来处理。这样数据范围就缩小到了1024个点,速度大大提升。

建图思路是建一源点与汇点,将每种方法与源点相连,权值为这样的方法反复的次数,将每一个星球与汇点相连,权值为每一个星球的最大容量,再将每种方法与星球相连,权值为INF,最后推断是否满流。

代码例如以下:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include <algorithm>using namespace std;
const int INF=1e9;
int head[2000], s, t, nv, n, cnt;
int num[2000], d[2000], pre[2000], cur[2000], q[2000], fei[2000];
struct node
{int u, v, next, cap;
}edge[1000000];
void add(int u, int v, int cap)
{edge[cnt].v=v;edge[cnt].cap=cap;edge[cnt].next=head[u];head[u]=cnt++;edge[cnt].v=u;edge[cnt].cap=0;edge[cnt].next=head[v];head[v]=cnt++;
}
void bfs()
{memset(num,0,sizeof(num));memset(d,-1,sizeof(d));int f1=0, f2=0, i;q[f1++]=t;d[t]=0;num[0]=1;while(f1>=f2){int u=q[f2++];for(i=head[u];i!=-1;i=edge[i].next){int v=edge[i].v;if(d[v]==-1){d[v]=d[u]+1;num[d[v]]++;q[f1++]=v;}}}
}
int isap()
{memcpy(cur,head,sizeof(cur));int flow=0, i, u=pre[s]=s;bfs();while(d[s]<nv){if(u==t){int f=INF, pos;for(i=s;i!=t;i=edge[cur[i]].v){if(f>edge[cur[i]].cap){f=edge[cur[i]].cap;pos=i;}}for(i=s;i!=t;i=edge[cur[i]].v){edge[cur[i]].cap-=f;edge[cur[i]^1].cap+=f;}flow+=f;if(flow>=n)return flow;u=pos;}for(i=cur[u];i!=-1;i=edge[i].next){if(d[edge[i].v]+1==d[u]&&edge[i].cap){break;}}if(i!=-1){cur[u]=i;pre[edge[i].v]=u;u=edge[i].v;}else{if(--num[d[u]]==0) break;int mind=nv;for(i=head[u];i!=-1;i=edge[i].next){if(mind>d[edge[i].v]&&edge[i].cap){mind=d[edge[i].v];cur[u]=i;}}d[u]=mind+1;num[d[u]]++;u=pre[u];}}return flow;
}
int main()
{int m, x, i, j, top, y, z, num, a[20];while(scanf("%d%d",&n,&m)!=EOF){memset(head,-1,sizeof(head));memset(fei,0,sizeof(fei));cnt=0;s=0;top=0;num=0;for(i=1;i<=n;i++){x=0;for(j=1;j<=m;j++){scanf("%d",&y);x=x*2+y;}fei[x]++;}for(i=1;i<=1100;i++){if(fei[i]){num++;}}t=num+m+1;nv=t+1;for(i=1;i<=1100;i++){if(fei[i]){//printf("--%d %d\n", i, fei[i]);top++;add(s,top,fei[i]);x=i;z=m+1;while(x){y=x%2;z--;if(y){add(top,z+num,INF);}//printf("--%d %d %d %d--",y, top, z, num);x=x/2;}//printf("\n");}}for(i=1;i<=m;i++){scanf("%d",&x);add(i+num,t,x);}x=isap();if(x>=n)printf("YES\n");elseprintf("NO\n");}return 0;
}


转载于:https://www.cnblogs.com/gcczhongduan/p/4296425.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为学好计算机 要采取什么措施,计算机概念教学的内容及对策

摘 要:介绍有关概念教学的重要性及在概念教学中重视培养学生的思维能力、概念教学过程中应注意的问题和概念教学中采取的包括淡化、浅化、深化、跨越,在概念教学中应注意的问题,关键词:概念教学;淡化;浅化;深化;跨越中图分类号:G434文献标识码:AAccording to Different Content…

用递归计算一个数字每一位相加的结果。_leetcode 2 两数相加(c++)

两种解法&#xff0c;第一种是在原有的两个链表中选择更长的那个作为结果返回&#xff0c;虽然节约了空间&#xff0c;但是增加了时间复杂度&#xff0c;而且没有用到如何设置链表的增加与删除&#xff0c;第二种看起来清爽很多&#xff0c;逻辑也清晰。### 题目给出两个非空的…

LeetCode 1834. 单线程 CPU(排序 + 优先队列)

文章目录1. 题目2. 解题1. 题目 给你一个二维数组 tasks &#xff0c;用于表示 n​​​​​​ 项从 0 到 n - 1 编号的任务。 其中 tasks[i] [enqueueTimei, processingTimei] 意味着第 i​​​​​​​​​​ 项任务将会于 enqueueTimei 时进入任务队列&#xff0c;需要 pro…

tc溜溜865手机投屏卡_溜溜 TC Games 官网_专题

1、智能按键功能&#xff1a;该功能通过宏命令方式实现智能精准按键(vip)备注&#xff1a;a&#xff1a;在键位设置中勾选智能按键&#xff0c;并重新选用官方一键切雷vip键位b&#xff1a;目前仅支持软件内设置为 720 分辨率&#xff0c;及 *1080p 分辨率的手机c&#xff1a;该…

服务器支持磁盘阵列,服务器磁盘阵列、RAID级别的阐述

磁盘阵列磁盘阵列(Redundant Arrays of Independent Disks&#xff0c;RAID)&#xff0c;有“独立磁盘构成的具有冗余能力的阵列”之意。磁盘阵列是由很多价格较便宜的磁盘&#xff0c;组合成一个容量巨大的磁盘组&#xff0c;利用个别磁盘提供数据所产生加成效果提升整个磁盘系…

LeetCode 1835. 所有数对按位与结果的异或和(位运算 (ab)^(ac) = a(b^c) )

文章目录1. 题目2. 解题1. 题目 列表的 异或和&#xff08;XOR sum&#xff09;指对所有元素进行按位 XOR 运算的结果。 如果列表中仅有一个元素&#xff0c;那么其 异或和 就等于该元素。 例如&#xff0c;[1,2,3,4] 的 异或和 等于 1 XOR 2 XOR 3 XOR 4 4 &#xff0c;而 …

python入门基础系列_03python—9个基础常识-python小白入门系列

《python小白入门系列教程》 专栏 • 第03篇 文 | xc_718 深度好文&#xff1a;1828字 | 4分钟阅读 ​ 1. 注释 1&#xff09;单行注释&#xff1a;****# #注释内容 print(123) #123 print(abc) #abc print("abc") #abc **2&#xff09;多行注释&#xff1a; 或 **&q…

hihocoder1089 Floyd算法

题目链接&#xff1a;http://hihocoder.com/problemset/problem/1089 算法描述&#xff1a; floyd算法是求解图中任意两点最短路的经典算法&#xff0c;复杂度为O(n^3)。虽然我们完全可以用n次dijkstra算法来求任意两点的最短路&#xff0c;复杂度也是O(N^3)&#xff0c;但如果…

matlab 思维数组_matlab多维数组

1.一个三维数组由行、列和页三维组成&#xff0c;其中每一页包含一个由行和列构成的二维数组。2.利用标准数组函数创建多维数组Azeros(4,3,2)生成一个4行3列2页的三维全0数组&#xff0c;ones&#xff0c;rand和randn等函数有相似的用法。3.利用直接索引方式生成多维数组Azeros…

css英文左右对齐,中文英文左右padding一致两端对齐实现_js

先看下图&#xff1a;就是一个定宽的容器&#xff0c;左右padding值20像素&#xff0c;结果输入一段文字后(有中文也有英文字符)&#xff0c;会发现右侧根本就不对齐&#xff0c;有些地方距离右侧的空白大小也不是20像素&#xff0c;感觉不和谐&#xff0c;设计师就希望排列能够…

python判断字符类型编程_Python检测数据类型的方法总结

我们在用python进行程序开发的时候&#xff0c;很多时候我们需要检测一下当前的变量的数据类型。比如需要在使用字符串操作函数之前先检测一下当前变量是否是字符串。下面小编给大家分享一下在python中如何检测数据类型 首先我们打开CMD控制台&#xff0c;进入到python环境&…

RDD 编程

文章目录1. RDD 创建2. RDD转换3. RDD动作4. 持久化5. 分区6. 文件数据读写6.1 本地6.2 hdfs6.3 Json文件6.4 Hbase学习自 MOOC Spark编程基础1. RDD 创建 从文件创建 Welcome to____ __/ __/__ ___ _____/ /___\ \/ _ \/ _ / __/ _//___/ .__/\_,_/_/ /_/\_…

centos 限制只能访问某个目录的php文件

vi /etc/php.ini #编辑 open_basedir .:/tmp/ #在380行 设置表示允许访问当前目录(即PHP脚本文件所在之目录)和/tmp/目录,可以防止php木马跨站,如果改了之后安装程序有问题(例如&#xff1a;织梦内容管理系统)&#xff0c;可以注销此行&#xff0c; 或者直接写上程序的目录/da…

python saltstack web_saltstack web uiweb平台界面

拾壹015/04/2016 下午 3:254楼2016-04-15 15:18:15,632 [cherrypy.error ][ERROR ][10998] [15/Apr/2016:15:18:15] ENGINE TypeError(“argument of type ‘NoneType’ is not iterable”,)Traceback (most recent call last):File “/usr/lib/python2.6/site-packages/cherry…

楼宇自控ba系统 服务器,楼宇自控BA系统

1、系统介绍楼宇自控系统 (Building Automation System) 针对楼宇内各种机电设备进行集中管理和监控。楼宇控制系统主要包括空调新风机组、送排风机、集水坑与排水泵、电梯、变配电、照明等。在整个楼宇范围内&#xff0c;通过整套楼宇自动控制系统及其内置最优化控制程序和预设…

用python解决生活问题_Python解决生活问题之闹钟程序的实现

昨天下班回家忘了带手机充电器&#xff0c;手机熄火没闹钟了&#xff0c;可现实是迟到30分钟以内要罚100RMB&#xff0c;超过30分钟算旷工要扣除3天工资&#xff0c;想想这代价&#xff0c;好吧&#xff0c;还是自己动手写一个闹钟程序吧&#xff01; 系统环境&#xff1a; Lin…

推荐系统可利用的特征

学自 极客时间 《深度学习推荐系统实战》 推荐系统就是利用“用户信息”&#xff0c;“物品信息”&#xff0c;“场景信息”这三大部分有价值数据&#xff0c;通过构建推荐模型得出推荐列表的工程系统 特征其实是对某个行为过程相关信息的抽象表达 构建特征原则&#xff1a;尽…

搭建git服务器

在远程仓库一节中&#xff0c;我们讲了远程仓库实际上和本地仓库没啥不同&#xff0c;纯粹为了7x24小时开机并交换大家的修改。 GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说&#xff0c;既不想公开源代码&#xff0c;又舍不得给GitHu…

回拨系统服务器,CISCO接入服务器回拨功能的实现

很多人都在实践中配置过CISCO的接入服务器&#xff0c;象2511、2620或者是5300。接入服务器提供了廉价的通过电话拨号远程访问企业网的方式。但是接入服务器提供的回拨功能却很少有人用到。回拨的过程是用户拨通接入服务器&#xff0c;输入用户名/密码&#xff0c;通过认证后&a…

python3时间戳转换成时间_Python3 日期与时间戳相互转换

开发中经常会对时间格式处理&#xff0c;对于时间数据&#xff0c;比如2019-02-28 10:23:29&#xff0c;有时需要日期与时间戳进行相互转换&#xff0c;在Python3中主要用到time模块&#xff0c;相关的函数如下&#xff1a;其中unix_time函数是正常时间转unix时间戳&#xff0c…