[CodeVs1227]方格取数2(最大费用最大流)
网络流24题的坑还没填完,真的要TJ?
题目大意:一个n*n的矩阵,每格有点权,从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格子的数取出来,该格子的数就变成0,这样一共走K次,现在要求K次所达到的方格的数的和最大。
啊简单的费用流。每个点i拆成i和i',连一条容量为1的边价值为点权,再连一条容量inf的边价值为0来让这个点能被经过,然后S连(1,1)容量k价值0,i'和右、下的点连容量inf价值0的边,(n,n)'连T容量inf价值0,跑最大费用最大流。
MDZZ看见n50我就开50,这是矩阵啊喂
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
const int inf=,maxn=;
struct poi{int dis,pos;};
struct zs{int too,pre,c,cf,v,f;}e[];
priority_queue<poi>q;
bool operator <(poi a,poi b){return a.dis<b.dis;};
int n,k,z,tot,sum,ans;
int last[maxn],dist[maxn],pre[maxn];
bool v[maxn];
void read(int &k)
{
k=;int f=;char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(c<=''&&c>='')k=k*+c-'',c=getchar();
k*=f;
}
void add(int x,int y,int c,int v)
{
e[++tot].too=y;e[tot].c=e[tot].cf=c;e[tot].v=v;
e[tot].pre=last[x];last[x]=tot;
e[++tot].too=x;e[tot].v=-v;
e[tot].pre=last[y];last[y]=tot;
}
void spfa(int x)
{
for(int i=;i<=sum;i++)pre[i]=-,dist[i]=-inf,v[i]=;
dist[x]=;v[x]=;q.push((poi){,x});
while(!q.empty())
{
int now=q.top().pos;q.pop();
for(int i=last[now],too=e[i].too;i;i=e[i].pre,too=e[i].too)
if(e[i].cf)
if(dist[too]<dist[now]+e[i].v)
{
dist[too]=dist[now]+e[i].v;pre[too]=i;
if(!v[too])v[too]=,q.push((poi){dist[too],too});
}
v[now]=;
}
}
void ford(int s,int t)
{
spfa(s);
while(pre[t]!=-)
{
int mincf=inf;
for(int i=pre[t];i!=-;i=pre[e[i^].too])
mincf=min(mincf,e[i].cf);
ans+=dist[t]*mincf;
for(int i=pre[t];i!=-;i=pre[e[i^].too])
{
e[i].f+=mincf;e[i^].f=-e[i].f;
e[i].cf-=mincf;e[i^].cf+=mincf;
}
spfa(s);
}
}
int num(int x,int y){return (x-)*n+y;}
int main()
{
tot=;
read(n);read(k);sum=*n*n+;
add(,,k,);add(*n*n,sum,k,);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
read(z);
add(num(i,j),num(i,j)+n*n,,z);
add(num(i,j),num(i,j)+n*n,inf,);
if(i!=n)add(num(i,j)+n*n,num(i+,j),inf,);
if(j!=n)add(num(i,j)+n*n,num(i,j+),inf,);
}
ford(,sum);
printf("%d\n",ans);
}
[CodeVs1227]方格取数2(最大费用最大流)的更多相关文章
- P2045 方格取数加强版 最大费用最大流
$ \color{#0066ff}{ 题目描述 }$ 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现在从(1,1)出发,可以往右或者往下走,最后到达(n,n),每 ...
- 【Codevs1227】方格取数2(费用流)
题意:给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000) 现在从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格子的数取出来,该格子的数就变成 ...
- 【wikioi】1227 方格取数 2(费用流)
http://www.wikioi.com/problem/1227 裸题,拆点,容量为1,费用为点权的负数(代表只能取一次).再在拆好的两个点连边,容量为oo,费用为0.(代表能取0) 然后向右和下 ...
- 洛谷 P2045 方格取数加强版【费用流】
题目链接:https://www.luogu.org/problemnew/show/P2045 题目描述 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现 ...
- codevs1227:方格取数2
题目描述 Description 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= )现在从(,)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格子的数取出来,该 ...
- 【P2405】方格取数问题加强版(费用流)
考虑如何建图.还是老样子先拆点,然后把每两个点之间连接两条边,一条流量为1,费用为-点权,处理是否走这个点.一条流量无限,没有费用,因为哪怕一个点选过了,它的地方还是可以重复走过去的. 然后把经由一个 ...
- HDU 3376 && 2686 方格取数 最大和 费用流裸题
题意: 1.一个人从[1,1] ->[n,n] ->[1,1] 2.仅仅能走最短路 3.走过的点不能再走 问最大和. 对每一个点拆点限流为1就可以满足3. 费用流流量为2满足1 最大费用流 ...
- codevs1227 方格取数2 注意数组啊啊啊啊啊啊啊啊啊啊
一开始T了一组RE了一组,实在找不出错来,就把数组加了一个0竟然就多A了一组.很惊讶的又加了几个0最后竟然全A了!!! 懒得做了,改的是之前的那个蚯蚓的游戏问题.还是需要拆点,至于为什么不能重复走结点 ...
- 【P2774】方格取数问题(贪心+最大流,洛谷)
首先,我们要读懂这道题,否则你会和我一开始产生一样的疑问,把所有的数都取走剩下一个最小的不就可以了么???然后我们发现样例完全不是这么回事.题目中所说的使相邻的两个数没有公共边,是指你去走的数,也就是 ...
随机推荐
- hdu1596find the safest road(floyd)
find the safest road Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- Python3.5+selenium(11)脚本模块化&参数化
mail126.py脚本如下 from selenium import webdriver from time import sleep from model1 import Login driver ...
- ReadyAPI教程和示例(一)
声明:如果你想转载,请标明本篇博客的链接,请多多尊重原创,谢谢! 本篇使用的 ReadyAPI版本是2.5.0 通过下图你可以快速浏览一下主要的ReadyAPI中SoapUI功能: 一.创建一个功 ...
- SQL 怎么实现模糊查询?
执行数据库查询时,有完整查询和模糊查询之分. 一般模糊语句格式如下: SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件; 其中,关于条件,SQL提供了四种匹配模式: 一.%:表示零 ...
- selenide 自动化测试进阶一: 查找元素和相关操作
基础环境配置和举例请移步:https://www.cnblogs.com/davice/p/9298742.html 提到自动化有些测试同学就会问,我会使用工具录制做自动化,我会用工具或插件识别元素. ...
- Spring Boot 示例项目
Spring Boot 基于注解式开发 maven REST 示例项目 项目地址:https://github.com/windwant/spring-boot-service 项目地址: ...
- Java学习笔记-11.运行期间类型鉴定
1.Class对象的getClasses()方法获取的是该类中所有的公共的内部类,以及从父类,父接口继承来的内部类.getinterfaces()方法返回类继承的所有接口. import javax. ...
- 【shell 练习1】编写Shell条件句练习
实例一.比较两个整数大小 #!/bin/bash while true do read -p "Please input two int nums:" a b >/dev/& ...
- 软工1816 · Alpha冲刺(3/10)
团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 完成了对laravel框架的一整套机制的了解,对后端的处理流程有全面的认识对整 ...
- TCP系列30—窗口管理&流控—4、Cork算法
一.Cork算法概述 Cork算法与Nagle算法类似,也有人把Cork算法称呼为super-Nagle.Nagle算法提出的背景是网络因为大量小包小包而导致利用率低下产生网络拥塞,网络发生拥塞的时候 ...