题目

略,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】晨跑的更多相关文章

  1. 1877: [SDOI2009]晨跑

    1877: [SDOI2009]晨跑 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2007  Solved: 1085[Submit][Status][ ...

  2. BZOJ 1877: [SDOI2009]晨跑 费用流

    1877: [SDOI2009]晨跑 Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一 ...

  3. bzoj1877: [SDOI2009]晨跑

    挺裸的最小费用最大流... #include<cstdio> #include<queue> #include<cstring> #include<iostr ...

  4. BZOJ 1877: [SDOI2009]晨跑( 最小费用最大流 )

    裸的费用流...拆点, 流量限制为1, 最后的流量和费用即答案. ------------------------------------------------------------------- ...

  5. BZOJ_1877_[SDOI2009]晨跑_费用流

    BZOJ_1877_[SDOI2009]晨跑_费用流 题意: Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他 坚持下来的只有晨跑. 现在给出 ...

  6. BZOJ 3438 小M的作物 & BZOJ 1877 [SDOI2009]晨跑

    我由衷地为我的朋友高兴.哈哈,yian,当你nick name破百上千时,再打“蒟蒻”就会被打的. 好的,说正事吧.请注意,这还是题解.但我发现,网络流实在是太套路了(怪不得这两年几乎销声匿迹).我们 ...

  7. 【BZOJ1877】[SDOI2009]晨跑 最小费用最大流

    [BZOJ1877][SDOI2009]晨跑 Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现 ...

  8. AC日记——[SDOI2009]晨跑 bzoj 1877

    1877: [SDOI2009]晨跑 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 2131  Solved: 1142[Submit][Status][ ...

  9. [SDOI2009]晨跑[最小费用最大流]

    [SDOI2009]晨跑 最小费用最大流的板子题吧 令 \(i'=i+n\) \(i -> i'\) 建一条流量为1费用为0的边这样就不会对答案有贡献 其次是对 \(m\) 条边建 \(u'-& ...

  10. 【BZOJ】1877: [SDOI2009]晨跑(最小费用最大流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1877 费用流做多了,此题就是一眼题. 拆点表示只能经过一次,容量为1,费用为0. 然后再连边即可,跑 ...

随机推荐

  1. 第二十五节:scrapy爬虫识别验证码(四)手绘验证码识别

    一.介绍 今天主要介绍的是微博客户端在登录时出现的四宫格手绘验证码,不多说直接看看验证码长成什么样.        二.思路 1.由于微博上的手绘验证码只有四个宫格,且每个宫格之间都有有向线段连接,所 ...

  2. 防御式编程之断言assert的使用

    防御式编程的重点就是需要防御一些程序未曾预料的错误,这是一种提高软件质量的辅助性方法,断言assert就用于防御式编程,编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设.使用断言是 ...

  3. JavaScript冒泡排序+Vue可视化冒泡动画

    冒泡排序(Bubble Sort)算是前端最简单的算法,也是最经典的排序算法了.网上JavaScript版本的冒泡排序很多,今天用Vue实现一个动态的可视化冒泡排序. 01.JavaScript冒泡排 ...

  4. cs231n__5.1/5.2 CNN

    CS231n note 5.1 CNN_history now: 略 5.2 CNN 上节课我们谈到了全连接层的概念: 对于全连接层而言,我们要做的就是在这些向量上进行操作. 例如: 但是至于卷积层, ...

  5. Django之SQL注入漏洞复现(CVE-2021-35042)

    前言 SQL注入的原理是对web请求,表单或域名等提交查询的字符串没有进行安全检测过滤,攻击者可以拼接执行恶意SQL命令,导致用户数据泄露 漏洞原理 Django 组件存在 SQL 注入漏洞,该漏洞是 ...

  6. Python实验报告(第7章)

    实验7:面向对象程序设计 一.实验目的和要求 1.了解面向对象的基本概念(对象.类.构造方法): 2.学会类的定义和使用: 3.掌握属性的创建和修改: 4.掌握继承的基本语法. 二.实验环境 软件版本 ...

  7. BZOJ4919 大根堆(树形dp+线段树合并)

    用 multiset 启发式合并贪心维护 LIS 的做法就不多说了,网上题解一大堆,着重讲一下线段树合并维护 \(dp\). \(O(n^2)\) 的 \(dp\) 非常显然.离散化后,设 \(dp[ ...

  8. Springboot启动时加载

    @Component public class SpringBootInitialization1 implements ServletContextListener { @Override publ ...

  9. Java线程诊断

    1.诊断CPU占用过高 [root@master ~]# nohup java -jar JvmProject.jar & // 有问题的java程序 [1] 1627 [root@maste ...

  10. 使用Spring MVC框架进行前台页面跳转时,跳转到的新页面中文显示乱码的问题解决

    使用Spring MVC框架进行前台页面跳转时,跳转到的新页面中文显示乱码的问题解决   摘要:我昨天花了一天时间学习了SSM项目搭建,却在最终的编码问题上拉胯了,在使用Spring MVC框架进行前 ...