题目链接

出题者本人


Description

上决╇ф来到Ceph的洞穴门口,守门的是一个n∗mn∗m的Ceph兵团列阵。上决╇ф的GAUSS 2014电磁轨道反器材步枪,已经充足了电,随时准备与Ceph军团大战!

这个阵列中共有kk个Ceph小兵,对于编号为ii的小兵,上决╇ф可以中aiai的电能,将其击倒。当然,GAUSS 2014威力巨大,可以一次击倒一行或者一列的小兵。击倒第ii行小兵所需的电能为riri,击倒第jj列小兵所需的电能为cjcj。

问要将整个列阵的兵团击倒,最少需要多少电能。

Input

第一行,包含三个整数n,m,kn,m,k(1≤n,m≤100,1≤k≤n∗m1≤n,m≤100,1≤k≤n∗m),分表代表列阵的行数和列数,以及列阵中小兵的个数。
接下来一行,包含nn个整数riri(1≤ri≤1001≤ri≤100),代表击倒第ii行小兵所需的电能。
接下来一行,包含mm个整数cjcj(1≤ci≤1001≤ci≤100),代表击倒第jj列小兵所需的电能。
接下来kk行,每行三个整数x,y,px,y,p(1≤x≤n1≤x≤n,1≤y≤m1≤y≤m,1≤p≤1001≤p≤100),代表在第x行第y列有一个小兵,击倒他需要p的电能。

Output

输出一个整数,为击倒列阵内所有小兵所需的电能。

  • Sample Input
  • Raw

2 2 3 1 1 1 1 1 1 1 1 2 100 2 2 100

  • Sample Output
  • Raw

2


这道题的建边的思路是真的很不错,我们在处理横向打击、纵向打击,还有单点打击的问题上很好的建边了。

我们这样子去考虑建边,从源点出发,到达的是每一个横向的打击的并且流的大小为代价,然后对所有的纵向打击确定流的大小为代价的链接上汇点,对于中间是否需要将横向与纵向链接起来,需要考虑纵向与横向所交叉得到的点是否是存在的,如果存在,就建立一条权值为单点消灭的流。


#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define esp 1e-6
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int maxN = 105, maxE = 4e4 + 7, S = 0, maxP = 1e4 + 7;
int N, M, K, r[maxN], c[maxN], T, head[maxP], cur[maxP], cnt;
struct Eddge
{int nex, to, flow;Eddge(int a=0, int b=0, int c=0):nex(a), to(b), flow(c) {}
}edge[maxE];
inline void addEddge(int u, int v, int flow)
{edge[cnt] = Eddge(head[u], v, flow);head[u] = cnt++;
}
inline void _add(int u, int v, int flow) { addEddge(u, v, flow); addEddge(v, u, 0); }
int deep[maxP];
queue<int> Q;
bool bfs()
{memset(deep, 0, sizeof(deep));while(!Q.empty()) Q.pop();Q.push(S);  deep[S] = 1;while(!Q.empty()){int u  = Q.front(); Q.pop();for(int i=head[u], v, f; ~i; i=edge[i].nex){v = edge[i].to; f = edge[i].flow;if(!deep[v] && f){deep[v] = deep[u] + 1;Q.push(v);}}}return deep[T];
}
int dfs(int u, int dist)
{if(u == T) return dist;for(int &i=cur[u], v, f, di; ~i; i=edge[i].nex){v = edge[i].to; f = edge[i].flow;if(f && deep[v] == deep[u] + 1){di = dfs(v, min(dist, f));if(di){edge[i].flow -= di;edge[i^1].flow += di;return di;}}}return 0;
}
int Dinic()
{int ans = 0, tmp;while(bfs()){for(int i=S; i<=T; i++) cur[i] = head[i];while((tmp = dfs(S, INF))) ans += tmp;}return ans;
}
inline void init()
{cnt = 0;    T = K + N + M + 1;memset(head, -1, sizeof(head));
}
int main()
{scanf("%d%d%d", &N, &M, &K);init();for(int i=1; i<=N; i++){scanf("%d", &r[i]);_add(S, K + i, r[i]);}for(int i=1; i<=M; i++){scanf("%d", &c[i]);_add(K + N + i, T, c[i]);}for(int i=1, x, y, w; i<=K; i++){scanf("%d%d%d", &x, &y, &w);_add(K + x, K + N + y, w);}printf("%d\n", Dinic());return 0;
}

上决╇ф的精确打击问题【最大流】相关推荐

  1. 上决╇ф的精确打击问题

    题目链接:上决╇ф的精确打击问题 题目大意:给你一个矩阵,矩阵里面有一些士兵,每次可以消灭一行或者一列,或者一个单点,问最小费用. 按行,列,建图,对于每个点,行连向列,权值为点的权值即可. AC代码 ...

  2. 西南科技大学院赛 I题 上决╇ф的精确打击问题 【最大流好题】 建模问题

    传送门 题意: 就是一个矩阵中有些点上面有一些鸟, 然后你可以对每一行或者每一列进行开枪, 会打死这一行或者这一列上面所有的鸟, 然后每一行和每一列都有一个花费, 如果在相应的行(列)开枪就必须付出相 ...

  3. power oj 2783: 上决╇ф的精确打击问题

    传送门 分析:很显然,最小割模型分析:很显然,最小割模型分析:很显然,最小割模型 code:code:code: #include <map> #include <list> ...

  4. 上决╇ф的遗言-后缀数组

    https://www.oj.swust.edu.cn/problem/show/2779 题意中文题不说了. 做法:后缀数组,想把两个串连接起来,求sa和height数组,因为题目要求求的公共子串, ...

  5. Power oj 2781: 上决╇ф的黑科技 (任意模数NTT|拆系数FFT)

    https://www.oj.swust.edu.cn/problem/show/2781 式子很好推 很明显卷积即可 可以使用 NTT或者拆系数FFT 这里使用的是NTT #include < ...

  6. zw版_Halcon-delphi系列教程_卫星航拍精确打击目标自动识别

    <zw版·Halcon-delphi系列原创教程> 卫星航拍精确打击目标自动识别 这几天,俄罗斯空军在叙利亚大显神威,美军有意见了,说俄罗斯是狂轰滥炸,不是精确打击.       不过,战 ...

  7. 天基信息支持远程精确打击作战及其体系建设的需求

    天基信息支持远程精确打击作战及其体系建设的需求 一篇很好的文章,感谢原创作者! 天基信息支持远程精确打击作战及其体系建设的需求

  8. SWUST 2489 上决欺负HZF

    [题意] 由于HZF长得太帅,被各种人调戏是绝对的啦!今天上决十分的无聊,于是就去欺负HZF不会数据结构,嘻嘻.来点简单的嘛,免得峰哥报复,那就--HZF嘿嘿一笑:看我无敌版函数式平衡逆天启发式线段树 ...

  9. 杠上Spark、Flink?Kafka为何转型流数据平台

    AI前线导读: 消息中间件系统(比如RabbitMQ.Kafka.Pulsar等)是现代实时数据或者流数据基础架构的关键环节.它通常作为一个数据管道,链接了各种业务前台和数据后台(比如数仓等).但是随 ...

最新文章

  1. 偏方收藏(此信息为本人收藏,安全性无法验证,使用后产生的一些后果自负)...
  2. ERROR: Failed to find Platform SDK with path: platforms;android-27
  3. 实验4.1 循环控制 一
  4. linux系统运行时间
  5. pytorch错误解决: BrokenPipeError: [Errno 32] Broken pipe
  6. Matlab 日常技巧 ,判断文件存在
  7. 《复杂》读书笔记(part6)--计算机中的自我复制
  8. python3 之 天天生鲜 项目 缓存cache
  9. php 异步请求微信模板消息_php实现微信模板消息推送
  10. 关于SpringMVC中text/plain的编码导致的乱码问题解决方法
  11. linux内核阅读感悟,读Kernel感悟-Linux内核启动-从hello world说起
  12. [C++基础]队列queue中的常用函数
  13. springboot健康饮食管理系统
  14. 毕业设计 嵌入式超声波雷达可视化系统
  15. VS2008个人博客系统
  16. Android开根号运算
  17. POST请求下载文件
  18. 微擎 人人商城 对接京东vop 对接京东商品,同步商品 地址,库存,价格,上下架等。(二)上 设置后台管理界面...
  19. 不曾想过 未来的_未来想要什么
  20. mysql的循环语句(循环插入数据)

热门文章

  1. 金融大数据平台总体技术要求
  2. 《网络安全0-100》安全策略制定
  3. vs2019ef链接mysql_VS2019+EF6连接Mysql
  4. TensorFlow2简单入门-四维张量
  5. 与单点金刚石车去除量相关的一个程序
  6. 明景移动式视频智能摘要检索分析系统
  7. 【名道电商】如何打造差异化营销
  8. 三个装修 家具 装饰公司网站模板 大气美观 简单明了的静态模板
  9. 设计-来做一个Windows hello的小动画
  10. redis哨兵、cluster