洛谷 P4013 数字梯形问题
->题目链接
题解:
网络流。
#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
#define N 4010
#define inf 1000000000
using namespace std;
int a[N][N],head[N],dis[N],inq[N],fa[N],n,m,num,cnt,S,T;
struct node {
int u,v,pre,f,w;
} e[N];
void add(int u,int v,int f,int w) {
e[++cnt].u=u;e[cnt].v=v;
e[cnt].f=f;e[cnt].w=w;
e[cnt].pre=head[u];head[u]=cnt;
e[++cnt].u=v;e[cnt].v=u;
e[cnt].f=;e[cnt].w=-w;
e[cnt].pre=head[v];head[v]=cnt;
}
bool spfa() {
for(int i=; i<=T; i++) dis[i]=inf;
queue<int> q;
q.push(S);
inq[S]=;
dis[S]=;
while(!q.empty()) {
int u=q.front();
q.pop();
inq[u]=;
for(int i=head[u]; i; i=e[i].pre)
if(e[i].f&&dis[e[i].v]>dis[u]+e[i].w) {
dis[e[i].v]=dis[u]+e[i].w;
fa[e[i].v]=i;
if(!inq[e[i].v]) {
inq[e[i].v]=;
q.push(e[i].v);
}
}
}
return dis[T]!=inf;
}
void mincost() {
int cost=;
while(spfa()) {
int tmp=fa[T],x=inf;
while(tmp) {
int u=e[tmp].u;
x=min(x,e[tmp].f);
tmp=fa[e[tmp].u];
}
tmp=fa[T];
while(tmp) {
e[tmp].f-=x;
e[tmp^].f+=x;
tmp=fa[e[tmp].u];
}
cost+=x*dis[T];
}
printf("%d\n",-cost);
}
int hao(int i,int j) {
return (m*+i-)*(i-)/+j;
}
void build1() {
cnt=;
memset(head,,sizeof(head));
for(int i=; i<=m; i++)
add(S,i,,-a[][i]);
for(int i=; i<n; i++)
for(int j=; j<=m+i-; j++)
add(hao(i,j)+num,hao(i+,j),,-a[i+][j]),add(hao(i,j)+num,hao(i+,j+),,-a[i+][j+]);
for(int i=; i<=m+n-; i++)
add(hao(n,i)+num,T,,);
for(int i=; i<=n; i++)
for(int j=; j<=m+i-; j++)
add(hao(i,j),hao(i,j)+num,,); }
void build2() {
cnt=;
memset(head,,sizeof(head));
for(int i=; i<=m; i++)
add(S,i,,-a[][i]);
for(int i=; i<=n; i++)
for(int j=; j<=m+i-; j++)
add(hao(i,j),hao(i+,j),,-a[i+][j]),add(hao(i,j),hao(i+,j+),,-a[i+][j+]);
for(int i=; i<=m+n-; i++)
add(hao(n,i),T,inf,);
}
void build3() {
cnt=;
memset(head,,sizeof(head));
for(int i=; i<=m; i++)
add(S,i,,-a[][i]);
for(int i=; i<=n; i++)
for(int j=; j<=m+i-; j++)
add(hao(i,j),hao(i+,j),inf,-a[i+][j]),add(hao(i,j),hao(i+,j+),inf,-a[i+][j+]);
for(int i=; i<=m+n-; i++)
add(hao(n,i),T,inf,);
}
int main() {
scanf("%d%d",&m,&n);
num=(m*+n-)*n/;
S=;
T=num*+;
for(int i=; i<=n; i++)
for(int j=; j<=m+i-; j++)
scanf("%d",&a[i][j]);
build1();
mincost();
build2();
mincost();
build3();
mincost();
return ;
}
AC
我走我的独木桥。
洛谷 P4013 数字梯形问题的更多相关文章
- 洛谷P4013数字梯形问题——网络流24题
题目:https://www.luogu.org/problemnew/show/P4013 最大费用最大流裸题: 注意:在第二种情况中,底层所有点连向汇点的边容量应该为inf,因为可以有多条路径结束 ...
- 洛谷P4013 数字梯形问题(费用流)
传送门 两个感受:码量感人……大佬nb…… 规则一:$m$条路径都不相交,那么每一个点只能经过一次,那么考虑拆点,把每一个点拆成$A_{i,j}$和$B_{i,j}$,然后两点之间连一条容量$1$,费 ...
- 洛谷P4013 数字梯形问题(费用流)
题意 $N$行的矩阵,第一行有$M$个元素,第$i$行有$M + i - 1$个元素 问在三个规则下怎么取使得权值最大 Sol 我只会第一问qwq.. 因为有数量的限制,考虑拆点建图,把每个点拆为$a ...
- 洛谷 P4013 数字梯形问题【最大费用最大流】
第一问:因为每个点只能经过一次,所以拆点限制流量,建(i,i',1,val[i]),然后s向第一行建(s,i,1,0),表示每个点只能出发一次,然后最后一行连向汇点(i',t,1,0),跑最大费用最大 ...
- 洛谷P1118 数字三角形游戏
洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直 ...
- 洛谷P1553 数字翻转(升级版)
题目链接 https://www.luogu.org/problemnew/show/P1553 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的 ...
- P4013 数字梯形问题 网络流二十四题
P4013 数字梯形问题 题目描述 给定一个由 nn 行数字组成的数字梯形如下图所示. 梯形的第一行有 m 个数字.从梯形的顶部的 m 个数字开始,在每个数字处可以沿左下或右下方向移动,形成一条从梯形 ...
- P4013 数字梯形问题 网络流
题目描述 给定一个由 nn 行数字组成的数字梯形如下图所示. 梯形的第一行有 mm 个数字.从梯形的顶部的 mm 个数字开始,在每个数字处可以沿左下或右下方向移动,形成一条从梯形的顶至底的路径. 分别 ...
- P4013 数字梯形问题
\(\color{#0066ff}{题目描述}\) 给定一个由 \(n\) 行数字组成的数字梯形如下图所示. 梯形的第一行有 \(m\) 个数字.从梯形的顶部的 \(m\) 个数字开始,在每个数字处可 ...
随机推荐
- funuiTitle-居中问题修改
今天遇到了一个问题,在一个actionbar上,title居中了,现在想要的方式是,让actionbar上显示返回按钮,后面紧跟着title.当时自己一直尝试要找到activity,然后在theme中 ...
- BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游(LCT,泰勒展开,二项式定理)
Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数学的语言展现出来. 这印证了一句古老的名言: ...
- Python操作MySQL数据库完成简易的增删改查功能
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶效果展示 三丶数据准备 四丶代码实现 五丶完整代码 一丶项目介绍 1.叙述 博主闲暇之余花了10个小时写的 ...
- 三、Docker镜像的相关操作
原文:三.Docker镜像的相关操作 一.查看本地镜像: docker images 二.使用某个镜像来运行容器: docker run -t -i xxxx(镜像名):xx.xx(版本,不带即最新) ...
- MFC只允许程序单开
很多玩游戏的人都知道一般游戏客户端程序是不允许双开的,就是说在同一游戏在启动的时候,是无法打开多个窗口.很多其他软件如酷狗播放器等也是这样.如果把打开的窗口最小化,这时重新启动程序,最小化的窗口会被显 ...
- codevs 5960 信使
codevs 5960 信使 题目描述 Description 战争时期,前线有n个哨所,每个哨所可能会与其他若干个哨所之间有通信联系.信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单 ...
- [React & Testing] Simulate Event testing
Here we want to test a toggle button component, when the button was click, state should change, styl ...
- UVa 11015 - 05-2 Rendezvous
題目:有一個班級的學生要一起寫作業,所以他們要到一個統一的地點.現在給你他們各自的位置, 問集合地點定在哪,能够讓全部人走的總路徑長度最小. 分析:圖論.最短路.直接利用Floyd計算最短路,找到和值 ...
- javascript中if条件
1.布尔变量 true/false 2.数字非0.非NaN/0.NaN 3.对象非null/null.nudefined 4.字符串非空串/空串 if(!!str){ //do something } ...
- 知无涯者(The Man Who Knew Infinity)
1913年的1月16号在剑桥大学的三一学院那里,著名的数学家哈代教授收到了一封信,信的开头是这种: "尊敬的先生.仅自我介绍例如以下,我是马德拉斯港务信托处的一个职员,年薪唯独20英镑.23 ...