bzoj1570: [JSOI2008]Blue Mary的旅行
来源:互联网 发布:java线程与进程的区别 编辑:程序博客网 时间:2024/06/07 11:22
传送门
显然网络流水题。
显然我们听该按照天数将图分层,
每一天分作一层,每一层的点向下一层连边
从源点向第0层的1号点连边
每层的n向T连inf的边
从1开始枚举天数,每多一天就多建一层然后跑最大流.
如果最大流=T则输出答案
由于1~n的路径长度不会超过n,
因此T个人排队走这条路径总天数不会超过T+n
故只需要建n+T层即可出解,网络流可以跑出来
#include<cstring>#include<cmath> #include<cstdio> #include<iostream> #include<cstdlib> #include<algorithm>#define inf 0x3f3f3f3f#define N 5005using namespace std;struct edge{int val,to,next;}e[N*100];struct data{int x,y,z;}ed[N];int head[N],dis[N],q[N];int tot=1,n,m,t,sum;inline void ins(int x,int y,int u){ e[++tot].to=y; e[tot].val=u; e[tot].next=head[x]; head[x]=tot;}inline void add(int x,int y,int u){ins(x,y,u),ins(y,x,0);}inline int bfs(){ memset(dis,inf,sizeof(dis)); dis[0]=q[1]=0; int h=0,t=1,x; while (h!=t){ x=q[++h]; for (int i=head[x];i;i=e[i].next) if (dis[e[i].to]==inf&&e[i].val){ dis[e[i].to]=dis[x]+1; q[++t]=e[i].to; } } if (dis[N-1]!=inf) return 1; return 0;}int dfs(int x,int fa,int flow){ if (x==N-1) return flow; int rest=flow; for (int i=head[x];i&&rest;i=e[i].next) if (e[i].to!=fa&&dis[e[i].to]==dis[x]+1){ int k=dfs(e[i].to,x,min(e[i].val,rest)); e[i].val-=k; e[i^1].val+=k; rest-=k; } if (rest) dis[x]=-1; return flow-rest;}int main(){ scanf("%d%d%d",&n,&m,&t); for (int i=1;i<=m;i++) scanf("%d%d%d",&ed[i].x,&ed[i].y,&ed[i].z); sum=0; add(0,1,t); for (int i=1;i<=n+t;i++){ for (int j=1;j<=m;j++) add(i*n-n+ed[j].x,i*n+ed[j].y,ed[j].z); for (int j=1;j<=n;j++) add(i*n-n+j,i*n+j,inf); add(i*n+n,N-1,inf); while (bfs()) sum+=dfs(0,-1,inf); if (sum==t){ printf("%d",i); return 0; } }}
0 0
- bzoj1570: [JSOI2008]Blue Mary的旅行
- bzoj1570: [JSOI2008]Blue Mary的旅行
- 【BZOJ1570】【JSOI2008】Blue Mary的旅行 最大流check
- 【bzoj1570】[JSOI2008]Blue Mary的旅行 最大流
- 【BZOJ1570】[JSOI2008]Blue Mary的旅行【最大流】
- [BZOJ1570][JSOI2008]Blue Mary的旅行(最大流)
- [bzoj1570][JSOI2008] Blue Mary的旅行 最大流
- 【bzoj1570】Blue Mary的旅行
- BZOJ P1570[JSOI2008]Blue Mary的旅行
- bzoj 1570: [JSOI2008]Blue Mary的旅行
- bzoj 1570: [JSOI2008]Blue Mary的旅行
- bzoj 1570: [JSOI2008]Blue Mary的旅行
- BZOJ 1570 JSOI2008 Blue Mary的旅行 网络流
- 1570: [JSOI2008]Blue Mary的旅行 最大流
- 1570: [JSOI2008]Blue Mary的旅行|网络流
- Blue Mary的旅行2
- BZOJ 1570: [JSOI2008]Blue Mary的旅行 最大流分层建图
- bzoj 1570: [JSOI2008]Blue Mary的旅行 分层图网络流
- 用js实现轮播切换(2)
- vs2015 c文件编译成dll文件
- Java类代码块执行顺序
- 开始Python机器学习(含资料)
- 自定义ScrollView实现可拖出边界的效果
- bzoj1570: [JSOI2008]Blue Mary的旅行
- mysql数据库的安装
- apache commons collections CollectionUtils工具类简单使用
- 使用node过程中出现了乱码
- null的伟大与可怕 之 String字符串方法2
- Directory PHP核心函数
- 聊聊网站分析术语:PV、IP、UV
- 5-8 哈利·波特的考试 (最短路径——迪杰斯特拉算法)
- UE4旅程之VR项目打包设置