http://www.lydsy.com/JudgeOnline/problem.php?id=1877

https://www.luogu.org/problemnew/show/P2153

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

费用流,点拆开连1的边权,每条边边权1费用为路程,跑一边即可。

#include<cstdio>
#include<iostream>
#include<queue>
#include<cstring>
#include<algorithm>
#include<cctype>
using namespace std;
typedef long long ll;
const int INF=1e9;
const int N=505,M=1e6+5;
inline int read(){int X=0,w=0;char ch=0;while(!isdigit(ch)){w|=ch=='-';ch=getchar();}while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X;
}
int S,T,n,m;
struct node{int nxt,to,w,b;
}edge[M];
int head[N],cnt=-1;
inline void add(int u,int v,int w,int b){edge[++cnt].to=v;edge[cnt].w=w;edge[cnt].b=b;edge[cnt].nxt=head[u];head[u]=cnt;edge[++cnt].to=u;edge[cnt].w=0;edge[cnt].b=-b;edge[cnt].nxt=head[v];head[v]=cnt;
}
int dis[N];
bool vis[N];
inline bool spfa(int s,int t){deque<int>q;memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++)dis[i]=INF;dis[t]=0;q.push_back(t);vis[t]=1;while(!q.empty()){int u=q.front();q.pop_front();vis[u]=0;for(int i=head[u];i!=-1;i=edge[i].nxt){int v=edge[i].to;int b=edge[i].b;if(edge[i^1].w&&dis[v]>dis[u]-b){dis[v]=dis[u]-b;if(!vis[v]){vis[v]=1;if(!q.empty()&&dis[v]<dis[q.front()]){q.push_front(v);}else{q.push_back(v);}}}}}return dis[s]<INF;
}
int ans,cur[N];
int dfs(int u,int flow,int m){if(u==m){vis[m]=1;return flow;}int res=0,delta;vis[u]=1;for(int &e=cur[u];e!=-1;e=edge[e].nxt){int v=edge[e].to;int b=edge[e].b;if(!vis[v]&&edge[e].w&&dis[u]-b==dis[v]){delta=dfs(v,min(edge[e].w,flow-res),m); if(delta){edge[e].w-=delta;edge[e^1].w+=delta;res+=delta;ans+=delta*b;if(res==flow)break;}}}return res;
}
inline int costflow(){int flow=0;while(spfa(S,T)){do{for(int i=1;i<=n;i++)cur[i]=head[i];memset(vis,0,sizeof(vis));flow+=dfs(S,INF,T);}while(vis[T]);}return flow;
}
int main(){memset(head,-1,sizeof(head));n=read(),m=read(),S=1,T=n;for(int i=2;i<n;i++)add(i,i+n,1,0);for(int i=1;i<=m;i++){int u=read(),v=read(),b=read();if(u==S)add(u,v,1,b);else add(u+n,v,1,b);}n*=2;printf("%d ",costflow());printf("%d\n",ans);return 0;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

转载于:https://www.cnblogs.com/luyouqi233/p/8504520.html

BZOJ1877:[SDOI2009]晨跑——题解相关推荐

  1. bzoj1877 [SDOI2009]晨跑 费用流

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

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

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

  3. 洛谷 [SDOI2009]晨跑

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

  4. [CodePlus 2017 11月赛]晨跑 题解(辗转相除法求GCD)

    [CodePlus 2017 11月赛]晨跑 Description "无体育,不清华"."每天锻炼一小时,健康工作五十年,幸福生活一辈子".在清华,体育运动绝 ...

  5. [SDOI2009]晨跑

    题目链接 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 inline ll rea ...

  6. bzoj 1877: [SDOI2009]晨跑 (网络流)

    明显拆点费用流: typearr=recordtoward,next,cap,cost:longint;end;constmm=1<<30;maxn=1000;maxm=300000;va ...

  7. P2153 晨跑,费用流裸题

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

  8. [费用流]Bzoj P1877 晨跑

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

  9. 在一个风景秀丽的小镇,一天早上,有N名晨跑爱好者(编号1~N)沿着优雅的江边景观道朝同一方向进行晨跑

    [问题描述] 在一个风景秀丽的小镇,一天早上,有N名晨跑爱好者(编号1~N)沿着优雅的江边景观道朝同一方向进行晨跑,第i名跑者从位置si处起跑,且其速度为Vi.换句话说,对所有的实数t≥0,在时刻t时 ...

最新文章

  1. 用awk数组处理两个文件的例子
  2. 菜鸟学Linux命令:ssh命令 远程登录
  3. java lambda函数_最常用的 Java 8 中的 Lambda 函数(项目中实用笔记)
  4. vue中父子组件通信的坑
  5. 分布式数字签名令牌TokenProvider
  6. CityEngine下如何更好的实现影像与地形叠加
  7. linux 中文 音乐播放器,linux下的常见音乐播放器
  8. 通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用 (
  9. 比较牛逼的答题卡扫描算法
  10. python 之 string() 模块
  11. SpringBoot 2.1.5(37)---SpringBoot 2.1.5 项目启动运行方式
  12. c语言一次绑定多个控件,一入前端深似海,从此红尘是路人系列第九弹之如何实现一个双向数据绑定...
  13. marathon传参一
  14. Coherence X:将任意网站转为macOS应用
  15. 田野调查手记·浮山篇(三)
  16. d2crub学习2 算合计
  17. 第22节 NAT(网络地址转换)—实现公网IP和私网IP之间的转换
  18. 用tensorboard可视化log日志
  19. 互联网让中国零售业弯道超车:近创新比黑科技重要
  20. 埃克森尔科技参与IEEE BDL SC数字身份标准工作组会议

热门文章

  1. SQL SERVER 2014 安装图解(含 SQL SERVER 2014 安装程序共享)
  2. UVA 620 - Cellular Structure
  3. C++实践笔记(四)----AVL树的简单实现
  4. mongo php 自增,PHP7下MongoDB自增或自减一个字段的值
  5. 08-01 Jmeter 核心原理与性能测试理论
  6. splines | 多项式回归和样条曲线回归
  7. graphics | 基础绘图系统(九)——栅格图、点密度图、等高线(填充)图、三维图...
  8. C语言分支结构while,C语言学习:分支结构和循环结构的总结(收藏)
  9. 学java有什么技巧?
  10. SSM框架搭建过程----学生学籍管理系统