JZOJ 1090. 【SDOI2009】晨跑
题目
略,luogu上有
解析
一眼费用流
然而怎么建图?
首先我们要挖掘题中的限制条件和性质
- 一个点只能经过一次
- 能走的天数最长
- 满足第二条的条件下走过的路程最短
那么显然是最小费用最大流了
对于后两条,我们发现我们求的最大流就要对应天数,最小费用就要对应路程最短
再联系第一条
一个点只能经过一次,那么我们就可以把它拆开成两个点 \(i_1,i_2\) 连流量为 \(1\) 费用为 \(0\) 的边,表示只能流过一次
然后就要使 \(u,v\) 间的连边变为 \(u_2,v_1,1,w\) 和 \(v_1,u_2,0,-w\)
那么源点 \(S\) 就是 \(1\) 拆成的第二个点,汇点 \(T\) 就是 \(n_1\)
最后跑一边 \(MCMF\) 就好了
\(Code\)
#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N = 405 , M = 4e4 + 5;
int n , m , pre[N] , edge[N] , dis[N] , flow[N] , h[N] , vis[N] , tot = 1 , Mincost , Maxflow , S , T;
queue<int> Q;
struct node{
int to , nxt , w , f;
}e[M << 1];
inline void add(int u , int v , int w , int f){e[++tot] = node{v , h[u] , w , f} , h[u] = tot;}
inline int spfa()
{
memset(dis , 127 , sizeof dis);
memset(flow , 127 , sizeof flow);
memset(vis , 0 , sizeof vis);
dis[S] = 0 , vis[S] = 1 , Q.push(S) , pre[T] = -1;
while (!Q.empty())
{
int now = Q.front();
Q.pop();
for(register int i = h[now]; i; i = e[i].nxt)
{
int v = e[i].to;
if (dis[now] + e[i].f < dis[v] && e[i].w)
{
dis[v] = dis[now] + e[i].f , pre[v] = now , edge[v] = i , flow[v] = min(flow[now] , e[i].w);
if (!vis[v]) vis[v] = 1 , Q.push(v);
}
}
vis[now] = 0;
}
return pre[T] != -1;
}
inline void MCMF()
{
while (spfa())
{
Maxflow += flow[T];
Mincost += dis[T] * flow[T];
int now = T;
while (now != S)
{
e[edge[now]].w -= flow[T];
e[edge[now] ^ 1].w += flow[T];
now = pre[now];
}
}
}
int main()
{
scanf("%d%d" , &n , &m);
for(register int i = 1; i <= n; i++)
{
add(i * 2 - 1 , i * 2 , 1 , 0);
add(i * 2 , i * 2 - 1 , 0 , 0);
}
int u , v , f;
for(register int i = 1; i <= m; i++)
{
scanf("%d%d%d" , &u , &v , &f);
add(u * 2 , v * 2 - 1 , 1 , f) , add(v * 2 - 1 , u * 2 , 0 , -f);
}
S = 2 , T = n * 2 - 1;
MCMF();
printf("%d %d\n" , Maxflow , Mincost);
}
JZOJ 1090. 【SDOI2009】晨跑的更多相关文章
- 1877: [SDOI2009]晨跑
1877: [SDOI2009]晨跑 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2007 Solved: 1085[Submit][Status][ ...
- BZOJ 1877: [SDOI2009]晨跑 费用流
1877: [SDOI2009]晨跑 Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一 ...
- bzoj1877: [SDOI2009]晨跑
挺裸的最小费用最大流... #include<cstdio> #include<queue> #include<cstring> #include<iostr ...
- BZOJ 1877: [SDOI2009]晨跑( 最小费用最大流 )
裸的费用流...拆点, 流量限制为1, 最后的流量和费用即答案. ------------------------------------------------------------------- ...
- BZOJ_1877_[SDOI2009]晨跑_费用流
BZOJ_1877_[SDOI2009]晨跑_费用流 题意: Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他 坚持下来的只有晨跑. 现在给出 ...
- BZOJ 3438 小M的作物 & BZOJ 1877 [SDOI2009]晨跑
我由衷地为我的朋友高兴.哈哈,yian,当你nick name破百上千时,再打“蒟蒻”就会被打的. 好的,说正事吧.请注意,这还是题解.但我发现,网络流实在是太套路了(怪不得这两年几乎销声匿迹).我们 ...
- 【BZOJ1877】[SDOI2009]晨跑 最小费用最大流
[BZOJ1877][SDOI2009]晨跑 Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现 ...
- AC日记——[SDOI2009]晨跑 bzoj 1877
1877: [SDOI2009]晨跑 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2131 Solved: 1142[Submit][Status][ ...
- [SDOI2009]晨跑[最小费用最大流]
[SDOI2009]晨跑 最小费用最大流的板子题吧 令 \(i'=i+n\) \(i -> i'\) 建一条流量为1费用为0的边这样就不会对答案有贡献 其次是对 \(m\) 条边建 \(u'-& ...
- 【BZOJ】1877: [SDOI2009]晨跑(最小费用最大流)
http://www.lydsy.com/JudgeOnline/problem.php?id=1877 费用流做多了,此题就是一眼题. 拆点表示只能经过一次,容量为1,费用为0. 然后再连边即可,跑 ...
随机推荐
- qtCreator警告解决
警告 qtCreator Warning: QT_DEVICE_PIXEL_RATIO is deprecated. Instead use: QT_AUTO_SCREEN_SCALE_FACTOR ...
- MVT模型与MVC模型的区别
1. MVC设计模式 MVC 是 Model-View-Controller 的缩写,其中每个单词都有其不同的含义: Modle 代表数据存储层,是对数据表的定义和数据的增删改查: View 代表视图 ...
- Django查看内部sql语句的方式
一:查看内部sql语句的方式 方式1(queryset对象才能够点击query查看内部的sql语句) res = models.User.objects.values_list('name', 'ag ...
- 玩转 Go 生态|Hertz WebSocket 扩展简析
WebSocket 是一种可以在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层.WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在 W ...
- 布尔值、元组、集合、input、格式化输出、赋值、运算符
今日内容总结 目录 今日内容总结 数据类型之布尔值bool 数据类型之元组tuple 数据类型之集合set 与用户交互 1.获取输入: input 2.输出内部信息 3.在python2中与pytho ...
- idea的简单介绍
上一篇博客中只是了解一下java文件是怎么编译的,但是一般来说大家都是使用编程软件来进行开发,我是使用IntelliJ IDEA进行开发的 官网下载IDEA(自行安装哈):地址:https://www ...
- SSM框架——整合ssm
SSM整合 1.准备工作 新建一个普通的Maven项目 建好所有需要的架构层 向pom.xml中导入所有的依赖 <!--MyBatis相关--> <dependency> &l ...
- [LeetCode]二进制求和
题目 代码 class Solution { public: string addBinary(string a, string b) { int lenA = a.length(); int len ...
- Java连接Zookeeper以及书写简单增删改查的方法
Java连接Zookeeper以及书写简单增删改查的方法 摘要:本笔记主要记录了使用IDEA创建一个Maven项目并使用Maven配置文件下载Zookeeper连接驱动,连接云服务器的Zookee ...
- 01-逻辑仿真工具VCS使用
1 逻辑仿真工具VCS的使用 在书写完成RTL代码之后,确保自己书写的代码和自己想要的逻辑是一致的. VCS是synopsys公司下的的仿真工具. 1 VCS仿真过程 编译-->仿真--> ...