P4313 文理分科 网络流

 其实也就卡了卡常,,,

先考虑没有same_art和same_science 。

起点用art的流量连向每个点,该点再用science的流量连向终点,断开哪边相当于少了哪边收益。

先全部收益加起来,再减去最小割即可。

那有same这些情况怎么办呢。

考虑新建节点v,起点以same_art连向v,断开即代表不获得这段收益。如何避免这个点不断开s的同时它覆盖区的点断开了s?再用v点向覆盖区连权值为inf的边,即可保证覆盖区的点要断则该点必断。same_science同理,在下不加以赘述。

528ms,勉强能卡过,,

#include<bits/stdc++.h>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<deque>
#include<list>
#include<set>
#include<vector>
#include<iostream>
#define ll int
#define re register
#define inf 0x7f7f7ff
#define inl inline
#define sqr(x) (x*x)
//#define eps 1e-8
#define debug printf("debug\n");
//#pragma comment(linker, "/STACK:1024000000,1024000000")
//#pragma GCC optimize (2)
//#pragma G++ optimize (2)
using namespace std;
const ll mod=51123987;
const ll MAXN=105;
inl ll read() {re ll x = 0; re int f = 1;char ch = getchar();while(ch<'0'||ch>'9') { if(ch== '-' ) f = -1; ch = getchar(); }while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x * f;
}
inl char readc() {char ch=getchar();while(('z'<ch||ch<'a')&&('Z'<ch||ch<'A')) ch=getchar();return ch;
}
inl void write(re ll x){if(x>=10)write(x/10);putchar(x%10+'0');
}
inl void writeln(re ll x){if(x<0) {x=-x;putchar('-');}write(x); puts("");
}
inl ll gcd(re ll x,re ll y){while(y^=x^=y^=x%=y);return x;}
inl ll Lcm(re ll a,re ll b) {return a/gcd(a,b)*b;}
inl void FR() {freopen(".in","r",stdin);freopen(".out","w",stdout);
}
inl void FC() {fclose(stdin);fclose(stdout);
}
struct edge{ll u,v,w,nxt;
}e[400005<<1];
ll ans,n,m,cnt=1,head[200005<<1],s,t,sst;
ll dx[10]={0,0,0,1,-1};
ll dy[10]={0,1,-1,0,0};
inl void adde(ll u,ll v,ll w) {e[++cnt].u=u;e[cnt].v=v;e[cnt].w=w;e[cnt].nxt=head[u];head[u]=cnt;
}
ll d[200005<<1],cur[200005<<1];
inl bool bfs() {queue<ll>Q;for(re ll i=s;i<=sst;i++) d[i]=0;Q.push(s);d[s]=1;while(!Q.empty()) {re ll x=Q.front();Q.pop();for(re ll h=head[x];h;h=e[h].nxt) {re ll v=e[h].v;if(e[h].w&&!d[v]) {d[v]=d[x]+1;if(v==t) return true ;Q.push(v);}}}return d[t];
}
ll dfs(ll x,ll limit) {if(x==t) return limit;ll used=0;for(re ll h=cur[x];h;h=e[h].nxt) {if(used==limit) break;if(d[e[h].v]==d[x]+1&&e[h].w) {ll t=dfs(e[h].v,min(limit-used,e[h].w));used+=t;e[h].w-=t;e[h^1].w+=t;}}if(!used) d[x]=0;return used;
}
int main() {
//  FR();n=read(),m=read();s=0;t=n*m+1;sst=t;for(re ll i=1;i<=n;i++) {for(re ll j=1;j<=m;j++) {re ll x=read();adde(s,(i-1)*m+j,x);adde((i-1)*m+j,s,0);ans+=x;}}for(re ll i=1;i<=n;i++) {for(re ll j=1;j<=m;j++)  {re ll x=read();adde((i-1)*m+j,t,x);adde(t,(i-1)*m+j,0);ans+=x;}}for(re ll i=1;i<=n;i++) {for(re ll j=1;j<=m;j++) {re ll x=read();ans+=x;sst++;adde(s,sst,x);adde(sst,s,0);for(re ll k=0;k<=4;k++) {re ll xx=i+dx[k],yy=j+dy[k];if(xx&&xx<=n&&yy&&yy<=m) {adde(sst,(xx-1)*m+yy,inf);adde((xx-1)*m+yy,sst,0);}}}}for(re ll i=1;i<=n;i++) {for(re ll j=1;j<=m;j++) {re ll x=read();ans+=x;sst++;adde(sst,t,x);adde(t,sst,0);for(re ll k=0;k<=4;k++) {re ll xx=i+dx[k],yy=j+dy[k];if(xx&&xx<=n&&yy&&yy<=m) {adde((xx-1)*m+yy,sst,inf);adde(sst,(xx-1)*m+yy,0);}}}}while(bfs()) {memcpy(cur,head,sizeof(cur));ans-=dfs(s,inf);}writeln(ans);
//  FC();return 0;
}

 

转载于:https://www.cnblogs.com/20020723YJX/p/9415477.html

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

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

相关文章

23--有效的括号

文章目录1.题目详情2.代码详情1.题目详情 给定一个只包括 ‘(’&#xff0c;’)’&#xff0c;’{’&#xff0c;’}’&#xff0c;’[’&#xff0c;’]’ 的字符串&#xff0c;判断字符串是否有效。有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号…

11 步教你选择最稳定的 MySQL 版本

MySQL开源数据库有多个重要分支&#xff0c;目前拥有的分支分别为&#xff1a;MySQL Cluster、MySQL 5.1、MySQL 5.5、MySQL 6.2。每个分支都有着同样的的MySQL数据库版本&#xff0c;分别为&#xff1a;Development版本、Alpha版本、Beta版本、RC版本和GA版本。Development版本…

【RabbitMQ】6、rabbitmq生产者的消息确认

2019独角兽企业重金招聘Python工程师标准>>> 通过Publisher Confirms and Returns机制&#xff0c;生产者可以判断消息是否发送到了exchange及queue&#xff0c;而通过消费者确认机制&#xff0c;Rabbitmq可以决定是否重发消息给消费者&#xff0c;以保证消息被处理…

泛型方法

java泛型方法简单介绍

修改jquery文件上传插件uploadify的英文为中文

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 效果&#xff1a; 对于这种样式的问题&#xff0c;我都是简单粗爆的解决&#xff1a; 找到uploadify的js文件&#xff0c;通常不是js&…

24--反转字符串中的单词 III

文章目录1.问题描述2. 代码详情1.问题描述 给定一个字符串&#xff0c;你需要反转字符串中每个单词的字符顺序&#xff0c;同时仍保留空格和单词的初始顺序。 示例 1: 输入: “Let’s take LeetCode contest” 输出: “s’teL ekat edoCteeL tsetnoc” 注意&#xff1a;在字…

poj2976 Dropping tests

01分数规划裸题 为毛二分一定要打成rmid这么恶心啊 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; typedef long long LL;int n,k; double a[1100…

Apache Cassandra 1.1.0 稳定版发布

Apache Cassandra团队今天正式推出了1.1分支的首个稳定版1.1.0版本。Apache Cassandra是一套开源的分布式 NoSQL 数据库系统&#xff0c;遵循 Apache Lience 2 协议。它最初由 Facebook 开发&#xff0c;用于储存收件箱等简单格式数据&#xff0c;集 Google BigTable 的数据模型…

如何仅花25美元并在3小时内完成ImageNet训练?

译者 | 核子可乐编辑 | Debra、VincentAI 前线导读&#xff1a;在斯坦福大学建立的项目 DAWNBench 竞赛中&#xff0c;CIFAR10 与 ImageNet 的表现引起了人们的关注&#xff0c;在目标基本一致的前提下&#xff0c;两者的准确度分别达 94% 和 93%&#xff0c;在成本和速度上均有…

java中什么是上下文

所谓上下文&#xff0c;它是用来存储系统的一些初始化信息&#xff0c;例如在jboss中通过配置文件指定了数据源&#xff0c;那么在jboss启动的时候就把这个文件的相关信息加载到上下文中&#xff0c;于是在我们使用这个数据源的时候&#xff0c;就需要先获得系统的上下文&#…

jquery文件上传插件uploadify 讲解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.名词解释&#xff1a; tracker服务器&#xff1a;中文叫做跟踪器&#xff0c;主要做调度工作&#xff0c;在访问上起负载均衡的作用。&…

POJ 1651 Multiplication Puzzle(类似矩阵连乘 区间dp)

传送门&#xff1a;http://poj.org/problem?id1651 Multiplication PuzzleTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 13109 Accepted: 8034Description The multiplication puzzle is played with a row of cards, each containing a single positive integ…

25--最后一个单词的长度

文章目录1.问题描述2.代码详情1.问题描述 给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s&#xff0c;返回其最后一个单词的长度。如果字符串从左向右滚动显示&#xff0c;那么最后一个单词就是最后出现的单词。 如果不存在最后一个单词&#xff0c;请返回 0 。 说明&…

MySQL 企业监控器 2.3.10 正式版发布

Oracle于近日发布了 MySQL 企业监控器 2.3.10 正式版。 MySQL企业监控器主要用于实施对数据库进行监控和管理。通过它&#xff0c;数据库管理员不但可以获得高级的数据复制和数据库监控功能&#xff0c;同时还可以简化安装流程。而且&#xff0c;无论是对于MySQL企业版&#xf…

Docker 跨主机网络方案分析

PS&#xff1a;文章首发公众号&#xff0c;欢迎大家关注我的公众号&#xff1a;aCloudDeveloper&#xff0c;专注技术分享&#xff0c;努力打造干货分享平台&#xff0c;二维码在文末可以扫&#xff0c;谢谢大家。 上篇文章介绍了容器网络的单主机网络&#xff0c;本文将进一步…

java中为什么使用上转型和下转型

为什么使用上转型&#xff1f;因为当一个父类有很多子类&#xff0c;子类都重写了父类的方法并加以使用。这时候&#xff0c;如果要在之前代码让你用其他子类来实现&#xff0c;就变得很简单&#xff0c;只需要把A a new B();换成A a new C();&#xff08;假设B和C都继承了A&…

session和cache的区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 以前实现数据的缓存有很多种方法&#xff0c;有客户端的Cookie&#xff0c;有服务器端的Session和Application。 其中Cookie是保存在客…

第四个

。 转载于:https://www.cnblogs.com/wxy2000/p/9657823.html

26-- 转换成小写字母

文章目录1.问题描述2.代码详情1.问题描述 实现函数 ToLowerCase()&#xff0c;该函数接收一个字符串参数 str&#xff0c;并将该字符串中的大写字母转换成小写字母&#xff0c;之后返回新的字符串。 示例 1&#xff1a; 输入: “Hello” 输出: “hello” 示例 2&#xff1a;…

java守护线程和用户线程的区别

Java中的线程可以分为两类&#xff0c;即用户线程和守护线程。用户线程是为了完成任务&#xff0c;而守护线程主要是为其他线程服务。 守护线程的唯一用途是为其他线程提供服务。守护线程会随时中断&#xff0c;因此不要在守护线程上使用需要释放资源的资源&#xff0c;如输入输…