Description

Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑、仰卧起坐等 等,不过到目前为止,他
坚持下来的只有晨跑。 现在给出一张学校附近的地图,这张地图中包含N个十字路口和M条街道,Elaxia只能从 一
个十字路口跑向另外一个十字路口,街道之间只在十字路口处相交。Elaxia每天从寝室出发 跑到学校,保证寝室
编号为1,学校编号为N。 Elaxia的晨跑计划是按周期(包含若干天)进行的,由于他不喜欢走重复的路线,所以 
在一个周期内,每天的晨跑路线都不会相交(在十字路口处),寝室和学校不算十字路 口。Elaxia耐力不太好,
他希望在一个周期内跑的路程尽量短,但是又希望训练周期包含的天 数尽量长。 除了练空手道,Elaxia其他时间
都花在了学习和找MM上面,所有他想请你帮忙为他设计 一套满足他要求的晨跑计划。

Input

第一行:两个数N,M。表示十字路口数和街道数。 
接下来M行,每行3个数a,b,c,表示路口a和路口b之间有条长度为c的街道(单向)。
N ≤ 200,M ≤ 20000。

Output

两个数,第一个数为最长周期的天数,第二个数为满足最长天数的条件下最短的路程长 度。

Sample Input

7 10
1 2 1
1 3 1
2 4 1
3 4 1
4 5 1
4 6 1
2 5 5
3 6 6
5 7 1
6 7 1

Sample Output

2 11

题解

  • 拆点费用流
  • 我们可以把一个点拆成i和i+n
  • 由于每个点只能到达一次,i向i+n连边,容量为1,费用为0
  • 然后按照题目描述的建图,从起点的i+n(出点)向终点的i(入点)连边,每条边的长度即为费用
  • 注意这里的边的容量也应该为1,因为有可能从1直接到n
  • 从源点向s+n连边,从n向汇点连边,容量都为INF,费用为0

代码

#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N=1001;
const int inf=0x3f3f3f3f;
int n,m,S,cnt,last[N],t,dis[N],f[N],d[N],ans1,ans2,s,v[N],q[N];
struct edge{int from,to,c,w,next,op;}e[N*N*2];
queue<int> Q;
void insert(int u,int v,int x,int y)
{e[++cnt].from=u; e[cnt].to=v; e[cnt].c=x; e[cnt].w=y; e[cnt].next=last[u]; last[u]=cnt; e[cnt].op=cnt+1;e[++cnt].from=v; e[cnt].to=u; e[cnt].c=0; e[cnt].w=-y; e[cnt].next=last[v]; last[v]=cnt; e[cnt].op=cnt-1;
}
bool spfa()
{for (int i=s;i<=t;i++){dis[i]=inf;v[i]=0;}int head=0,tail=1;q[1]=s; v[s]=1; dis[s]=0;while (head!=tail){if (head==1000) head=0;head++;int now=q[head],i=last[now];while (i){if (e[i].c&&dis[now]+e[i].w<dis[e[i].to]){dis[e[i].to]=dis[now]+e[i].w;d[e[i].to]=i;if (!v[e[i].to]){v[e[i].to]=1;if (tail==1000) tail=0;tail++;q[tail]=e[i].to;}}i=e[i].next;}v[now]=0;}if (dis[t]==inf) return 0;return 1;
}
void mcf()
{int mn=inf,x=t;while (d[x]){mn=min(mn,e[d[x]].c);x=e[d[x]].from;}ans1++;x=t;while (d[x]){e[d[x]].c-=mn;e[e[d[x]].op].c+=mn;ans2+=e[d[x]].w*mn;x=e[d[x]].from;}
}
int main()
{scanf("%d%d",&n,&m);s=1; t=n+n;for (int i=0;i<m;i++){int u,v,c;scanf("%d%d%d",&u,&v,&c);insert(u+n,v,1,c);}for (int i=2;i<n;i++) insert(i,i+n,1,0);insert(s,s+n,inf,0); insert(n,t,inf,0);while (spfa()) mcf();printf("%d %d\n",ans1,ans2);return 0;
}

  

转载于:https://www.cnblogs.com/Comfortable/p/9211047.html

[费用流]Bzoj P1877 晨跑相关推荐

  1. 2020牛客多校第1场H-Minimum-cost Flow-最小费用流

    https://ac.nowcoder.com/acm/contest/5666/H 题目大意:给出了每一条边的费用,有q个询问,问当每一条边的容量为u/v时,通过1流量的最小费用是多少. 思路:很明 ...

  2. UOJ #455.【UER #8】雪灾与外卖 堆模拟费用流

    题意 有n个人和m家商店,每个人都要买一道菜.第i个人的坐标是a[i],第j家商店的坐标是y[i],有c[i]道菜且每道菜价格为w[i],每个人还要花费其到商店距离的路费,问最小花费. n,m≤105 ...

  3. 【BZOJ 1877】 [SDOI2009]晨跑(费用流)

    题目描述 Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十字路口和M条街 ...

  4. P2153 晨跑,费用流裸题

    晨跑 题目连接 https://www.luogu.org/problemnew/show/P2153 题解 求最大不相交路径数,并在路径数最大前提下,求总路程最短. 太裸了. 求不相交路径数:将除1 ...

  5. bzoj1877 [SDOI2009]晨跑 费用流

    注意这个题要求每个点也只经过一次,所以直接复制点就行了 其他的都和普通费用流一样了 码: #include<iostream> #include<cstdio> #includ ...

  6. BZOJ 5326 [JSOI2017]博弈 (模拟费用流、线段树)

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=5326 题解 终于成为第8个A掉这题的人--orz tzw神仙早我6小时 本以为这东西常数 ...

  7. BZOJ.2597.[WC2007]剪刀石头布(费用流zkw)

    BZOJ 洛谷 \(Description\) 给定一张部分边方向已确定的竞赛图.你需要给剩下的边确定方向,使得图中的三元环数量最多. \(n\leq100\). \(Solution\) 这种选择之 ...

  8. BZOJ 4946: [Noi2017]蔬菜 模拟费用流

    title BZOJ 4946 LUOGU 3826 简化题意: 定义了一种蔬菜为:\(ai,si,ci,xi\),意思是蔬菜的价格为 \(a_i\),第一份卖出时价格为 \(a_i+s_i\),一共 ...

  9. BZOJ 1061费用流

    思路: 我们可以列出几个不等式 用y0带进去变成等式 下-上 可以消好多东西 我们发现 等式左边的加起来=0 可以把每个方程看成一个点 正->负 连边 跑费用流即可 //By SiriusRen ...

最新文章

  1. python 公司年会抽奖_用Python做个年会抽奖小程序吧
  2. Parsing XML in J2ME
  3. oracle主机名的脚本,一个开启Oracle服务和更改主机名的脚本-Oracle
  4. SpringBoot——slf4j+logback日志处理及配置详解
  5. 排序算法 —— 计数排序
  6. 如何把项目部署到云服务器上,如何把项目部署到云主机
  7. SimpleDet: 一套简单通用的目标检测与物体识别框架
  8. 10 python 扩展
  9. python读取txt文件中的数字_在python中从文本文件读取两列数字
  10. Linux安装MATLAB Compiler Runtime操作
  11. Mac最好用的RSS阅读器Reeder使用方法
  12. PB中导入EXCEL数据
  13. 网站机房:DDOS防火墙在企业机房中的应用介绍
  14. 奇怪的消费者心理:看三个趣味经济学原理
  15. 一起读论文 | 文本分类任务的BERT微调方法论
  16. 如何删除word中的长横线(由三个减号---自动生成)
  17. 阿里云培训-负载均衡(CLB/ALB)
  18. im即时通讯消息id的设计
  19. 2019.06.17
  20. iOS 抽取app中的图片图标资源

热门文章

  1. python pygame sdl2教程_无法安装pygame sdl2
  2. java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0特殊字符表达
  3. 江西省普通高考2021艺术楼统考成绩查询,统考成绩查询
  4. 【Jetty】Jetty 的工作原理以及与 Tomcat 的比较
  5. Java集合类学习总结
  6. python开发面向对象基础:封装
  7. Web安全之点击劫持
  8. Git_从远程库克隆
  9. 【转】处事22计、心态24条、伤心50句、礼仪73、学会长大20!
  10. PowerDesigner物理模型用法总结