Codeforces Gym101518H:No Smoking, Please(最小割)

题目链接

题意

给出一个n*m的酒店,每个点是一个房间,要将这个酒店的房间划分成为两块(一块无烟区,一块吸烟区),相邻的两个房间之间有一条带权边,权值代表空气锁的面积,如果把这条边给去掉,那么需要花费(空气锁的面积+开一个窗口传食物)*1000元。问需要的最少花费是多少。要注意如果面积为0,则这条边不能划分

思路

全场做的人不多,主要看题意比较难,看懂题意就会发现是裸的最小割,但是有个面积为0的坑点。这里的边需要开的比较大,考虑到每次增加两个点,就会使边增加三条(不知道这样想对不对),于是就开两倍(还有两倍双向边)。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int, int> pii;
const int INF = 0x3f3f3f3f;
const int M = 1e3 + 11;
const int N = 1e6 + 11;
struct Edge {int u, v, nxt, cap;
} edge[N*4];
int head[N], tot, id[M][M];
int cur[N], gap[N], dis[N], pre[N];
queue<int> que;void Add(int u, int v, int cap) {edge[tot] = (Edge) { u, v, head[u], cap }; head[u] = tot++;edge[tot] = (Edge) { v, u, head[v], cap }; head[v] = tot++;
}void BFS(int T) {while(!que.empty()) que.pop();memset(dis, INF, sizeof(dis));memset(gap, 0, sizeof(gap));gap[0] = 1; dis[T] = 0;que.push(T);while(!que.empty()) {int u = que.front(); que.pop();for(int i = head[u]; ~i; i = edge[i].nxt) {int v = edge[i].v;if(dis[v] != INF) continue;dis[v] = dis[u] + 1;gap[dis[v]]++;que.push(v);}}
}int ISAP(int S, int T, int n) {BFS(T);memcpy(cur, head, sizeof(cur));int i, flow, u = pre[S] = S, index, ans = 0;while(dis[S] < n) {if(u == T) {flow = INF, index = u;for(u = S; u != T; u = edge[cur[u]].v)if(edge[cur[u]].cap < flow) flow = edge[cur[u]].cap, index = u;for(u = S; u != T; u = edge[cur[u]].v)edge[cur[u]].cap -= flow, edge[cur[u]^1].cap += flow;u = index, ans += flow;}for(i = cur[u]; ~i; i = edge[i].nxt)if(dis[edge[i].v] == dis[u] - 1 && edge[i].cap) break;if(~i) {pre[edge[i].v] = u; cur[u] = i; u = edge[i].v;} else {if(--gap[dis[u]] == 0) break;int md = n + 1;for(i = head[u]; ~i; i = edge[i].nxt)if(edge[i].cap && dis[edge[i].v] < md) md = dis[edge[i].v], cur[u] = i;gap[dis[u] = md + 1]++;u = pre[u];}} return ans;
}int main() {int t; scanf("%d", &t);while(t--) {memset(head, -1, sizeof(head));tot = 0;int n, m, sx, sy, ex, ey;scanf("%d%d", &n, &m);scanf("%d%d%d%d", &sx, &sy, &ex, &ey);int cnt = 0;for(int i = 0; i < n; i++)for(int j = 0; j < m; j++) id[i][j] = ++cnt;for(int i = 0; i < n; i++) {for(int j = 0; j < m - 1; j++) {int cap; scanf("%d", &cap);if(cap) Add(id[i][j], id[i][j+1], cap + 1);}}for(int i = 0; i < n - 1; i++) {for(int j = 0; j < m; j++) {int cap; scanf("%d", &cap);if(cap) Add(id[i][j], id[i+1][j], cap + 1);}}printf("%d\n", ISAP(id[sx][sy], id[ex][ey], n * m) * 1000);} return 0;
}

转载于:https://www.cnblogs.com/fightfordream/p/7636624.html

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

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

相关文章

java如何实现服务降级_Hystrix服务降级

## 注意Hystrix默认的服务降级时长是1秒钟.因为网络波动,这个值在正式环境中需要调整一下.## 导入包~~~org.springframework.cloudspring-cloud-starter-netflix-hystrix2.0.1.RELEASE~~~## 启动类~~~package com.like;import org.springframework.boot.SpringApplication;impo…

谷歌浏览器不能上网_谷歌浏览器插件下载及安装教程!

emmm......这篇文章的内容非常小白&#xff0c;相信大部分人都会这个基本操作。但是阁主相信还有些妹子操作不来&#xff0c;如果还没有男朋友&#xff0c;那不是铁定不会安装谷歌浏览器插件么&#xff1f;其实“谷歌浏览器插件”这个组合&#xff0c;可以解决很多问题&#xf…

高级技巧之Lambda表达式

1.Lambda表达式简介 其本质上是一种匿名方法&#xff0c;它既没有方法名&#xff0c;也即没有访问修饰符和返回值类型&#xff0c;使用它来编写代码将会更加简洁&#xff0c;也更加易读。 2.使用该表达式需要配置的数据 3.传统java和使用Lambda表达式的对比 0&#xff09;总结&…

java二维数组两个框代表什么_在java语言中,二维数组的两个中括号[][]分别表示()和()。...

【判断题】一元统计分析是研究一个随机变量统计规律的学科。【判断题】合伙创业的成功率一般低于独资创业的成功率。【单选题】镜检时呈“竹节状”排列的是【判断题】酵母菌的菌落与放线菌的菌落相似。【判断题】木纤维是厚壁细胞的一种,它的化学成份以纤维素为主。( )【判断题…

设计模式之——Builder建造模式

Builder模式又叫建造模式&#xff0c;是用于组装具有复杂结构的实例的模式。 示例程序是编写一个文档&#xff0c;并且写入到文件中&#xff0c;该文档具有以下结构&#xff0c;含有标题&#xff0c;字符串&#xff0c;一些条目。 Builder抽象类&#xff0c;为建造模式的核心pa…

java程序员_Java和Python的区别 好程序员帮大家解读

Java和Python的区别 好程序员今天先来解读Java编程语言的优势&#xff0c;人工智能和大数据火爆一时&#xff0c;随之而来&#xff0c;引起了编程语言的人气暴涨。而Java和Python作为最炙手可热的编程语言从一开始便赢得了众多程序员的青睐。凭借各自强大的性能和优势&#xff…

java 工具类sort_Java 通用排序工具类ListSortUtils

场景&#xff1a;Java 类 需 重新排序&#xff0c;有时升序、有时倒叙&#xff0c;有时是多字段排序代码&#xff1a;package GenericTest;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Collections;import java.uti…

Centos 搭建 NFS

服务端yum -y install nfs-utils rpcbind chkconfig nfs on chkconfig rpcbind on mkdir -p /tmp/share chmod 600 /tmp/share vim /etc/exports /tmp/share 192.168.2.0/24(rw,no_root_squash,no_all_squash,sync) /tmp/share *(rw,no_root_squash,no_all_squash,sync) servic…

门户网站运营方案_网络营销方案涉及的工作内容有哪些

问&#xff1a;在公司从事网络营销推广工作&#xff0c;想问下要撰写网络营销方案&#xff0c;要涉及到哪些层面&#xff0c;工作内容有哪些呢&#xff1f;答&#xff1a;总的来说&#xff0c;网络营销方案涉及到&#xff1a;网站技术&#xff0c;市场营销&#xff0c;网络应用…

用宝塔本地搭建php,Windows系统如何使用宝塔面板一键快速搭建本地服务器环境(LNMP/LAMP)...

宝塔面板宝塔面板类似于wamp&#xff0c;xampp等一键集成环境。但是宝塔面板操作更简单&#xff0c;更新更快。个人建议使用宝塔替代wamp。(LNMP等环境不再赘述&#xff0c;请自行百度。建议使用LNMP环境&#xff0c;即NginxMySQLPHP环境)下载前往宝塔面板官网https://www.bt.c…

C# File类的操作

File类&#xff0c;是一个静态类&#xff0c;主要是来提供一些函数库用的。静态实用类&#xff0c;提供了很多静态的方法&#xff0c;支持对文件的基本操作&#xff0c;包括创建&#xff0c;拷贝&#xff0c;移动&#xff0c;删除和打开一个文件。File类方法的参量很多时候都是…

微信小程序动态点赞php,在微信小程序中如何实现点赞功能

这篇文章主要介绍了微信小程序基于本地缓存实现点赞功能的方法,涉及微信小程序界面布局、事件响应及缓存操作等相关实现技巧,需要的朋友可以参考下本文实例讲述了微信小程序基于本地缓存实现点赞功能的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;wxml中的写法…

lstm需要优化的参数_LSTM的物理结构和一些细节

海晨威&#xff1a;一幅图真正理解LSTM的物理结构​zhuanlan.zhihu.com这个是网上看的最多的图了&#xff0c;但是在理解lstm的应用过程中的时候这个图带来了不少麻烦。展开之后实际的物理结构是这样的&#xff0c;1、2图同颜色的点代表了同一个东西&#xff1b;问题1&#xff…

OLED中的Demura

OLED作为一种电流型发光器件已越来越多地被应用于高性能显示中。由于它自发光的特性&#xff0c;与LCD相比&#xff0c;AMOLED具有高对比度、超轻薄、可弯曲等诸多优点。但是&#xff0c;亮度均匀性和残像仍然是它目前面临的两个主要难题&#xff0c;要解决这两个问题&#xff…

python的编程模式有哪两种_python程序的两种运行方式是什么

python程序的两种运行方式是什么 第一种方式&#xff1a;REPL 所谓REPL即read、eva、print、loop&#xff08;读取、计算、打印、循环&#xff09;&#xff0c;实现REPL运行方式有以下两种&#xff1a; 1、IDLE&#xff08; 集成开发环境或集成开发和学习环境&#xff09;是Pyt…

对Linux命令od -tc -tx1的C语言程序实现myod-优化版

导语 自编od C语言实现版名为myod上个星期有一个初代版&#xff0c;链接- myod原版这星期的课上要求实现myod-系统调用版本&#xff0c;要求如下 1 参考教材第十章内容 2 用Linux IO相关系统调用编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能&#xff0c;注意XXX是文件…

python字典求平均值_Python 3.4 – 如何获得字典值的平均值?

好吧,让我们迭代所有字典键并平均项目&#xff1a; avgDict {} for k,v in StudentGrades.iteritems(): # v is the list of grades for student k avgDict[k] sum(v)/ float(len(v)) 现在你可以看到&#xff1a; avgDict Out[5]: {Ivan: 3.106666666666667, Martin: 4.81666…

PHP使用指南,PHP使用指南-cookies部分

php使用指南-cookies部分在这课教程我们将学习怎样利用 PHP 处理cookies,我将试着使事情尽可能简单地去解释cookies的一些实际应用。什么是cookies及作用&#xff1f;cookies是由web服务器产生的并且存在客户端的一些信息。它嵌在html信息中&#xff0c;由服务器端指定&#xf…

python猜数字游戏猜n次_python实践项目四:猜数字游戏

1 #!/usr/bin/python 2 #-*- coding: UTF-8 -*- 3 4 importrandom5 secretNumberrandom.randint(1,20)6 print "Im thinking of a number between 1 and 20." 7 times 08 for i in range(1,7):9 print "Take a guess:" 10 guessint(input())11 if guess

使用Linux记录

更新时间: 2018-12-12 Linux Usage 缘起&#xff1a;最近将系统更换为Linux&#xff0c;虽然之前有用过&#xff0c;但只是当作尝试&#xff0c;未当为主系统&#xff0c;这次下定决心以它为主系统&#xff0c;懒得去纠结使用win的一种不道德感及不爽感&#xff0c;游戏及娱乐与…