【最大流】BAPC2014 A Avoiding the Apocalypse (Codeforces GYM 100526)
题目链接:
http://codeforces.com/gym/100526
http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11664&courseid=0
题目大意:
总共N个点,现在有P个人,在T时间内要从起点S走到C个医疗站中的任意一个,M条X到Y的有向边,每条边每个单位时间可以通过的人数是pi,走完这条边耗时ti。
人可以停留在任意一个点,求最多能有多少人到达医疗站。
(1<=C<=N<=1000,0<=M<=1000,1<=P,T<=100,1<=pi,ti<=100)
题目思路:
【最大流】
SPFA居然T了。。
将每个点按照时间拆点{X节点j时间的状态为点X(j)},把X到Y的边pi,ti拆成T-ti条边,每条边从X(j)到Y(j+ti)容量为pi,j为时间从0~T-ti,表示在j时间有pi个人可以从X到Y,到达Y的时间为j+ti。
因为人可以停留在节点上所以X(i)到X(i+1)连一条容量P的边。
每个医疗站的最终时间Ci(T)到超级汇T_T连一条容量为P的边(到达医疗站的人就无限停留直到时间为T到超级汇T_T)
超级源S_S到起点S(0)连一条容量为P的边表示初始起点S有P个人。
最终统计到达超级汇的人数即可。跑一遍最大流。
- //
- //by coolxxx
- //#include<bits/stdc++.h>
- #include<iostream>
- #include<algorithm>
- #include<string>
- #include<iomanip>
- #include<map>
- #include<memory.h>
- #include<time.h>
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- //#include<stdbool.h>
- #include<math.h>
- #define min(a,b) ((a)<(b)?(a):(b))
- #define max(a,b) ((a)>(b)?(a):(b))
- #define abs(a) ((a)>0?(a):(-(a)))
- #define lowbit(a) (a&(-a))
- #define sqr(a) ((a)*(a))
- #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
- #define mem(a,b) memset(a,b,sizeof(a))
- #define eps (1e-8)
- #define J 10
- #define mod 1000000007
- #define MAX 0x7f7f7f7f
- #define PI 3.14159265358979323
- #define N 1004
- #define M 104
- using namespace std;
- typedef long long LL;
- int cas,cass;
- int n,m,lll,ans;
- int s,p,t,S,T,nn;
- int c[N];
- int last[N*M+M],vd[N*M+M],d[N*M+M];
- struct xxx
- {
- int next,to,q;
- }a[N*M*M];
- void add(int x,int y,int f)
- {
- a[++lll].next=last[x];
- a[lll].to=y;
- a[lll].q=f;
- last[x]=lll;
- }
- int sap(int u,int f)
- {
- int i,v,tt,asp=,mix=nn-;
- if(u==T)return f;
- for(i=last[u];i;i=a[i].next)
- {
- v=a[i].to;
- if(a[i].q>)
- {
- if(d[u]==d[v]+)
- {
- tt=sap(v,min(f-asp,a[i].q));
- asp+=tt;
- a[i].q-=tt;
- a[i^].q+=tt;
- if(asp==f || d[S]==nn)
- return asp;
- }
- mix=min(mix,d[v]);
- }
- }
- if(asp!=)return asp;
- if(!--vd[d[u]])d[S]=nn;
- else vd[d[u]=mix+]++;
- return asp;
- }
- int main()
- {
- #ifndef ONLINE_JUDGE
- // freopen("1.txt","r",stdin);
- // freopen("2.txt","w",stdout);
- #endif
- int i,j,k;
- int x,y,f,dd;
- for(scanf("%d",&cas);cas;cas--)
- // for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
- // while(~scanf("%s",s+1))
- // while(~scanf("%d",&n))
- {
- ans=;lll=;mem(vd,);mem(d,);mem(last,);
- scanf("%d%d%d%d%d",&n,&s,&p,&t,&cass);
- S=n*t+t+;T=S+;
- nn=T;vd[]=nn-t+;
- add(S,t,p);
- add(t,S,);
- add(t,s*t+,p);
- add(s*t+,t,);
- for(i=;i<=n;i++)
- {
- for(j=;j<t;j++)
- {
- add(i*t+j,i*t+j+,p);
- add(i*t+j+,i*t+j,);
- }
- }
- for(i=;i<=cass;i++)
- {
- scanf("%d",&c[i]);
- add(c[i]*t+t,T,p);
- add(T,c[i]*t+t,);
- }
- scanf("%d",&m);
- for(i=;i<=m;i++)
- {
- scanf("%d%d%d%d",&x,&y,&f,&dd);
- for(j=;j+dd<=t;j++)
- {
- add(x*t+j,y*t+j+dd,f);
- add(y*t+j+dd,x*t+j,);
- }
- if(x==s)
- {
- add(t,y*t+dd,f);
- add(y*t+dd,t,);
- }
- }
- while(d[S]<nn)
- {
- f=sap(S,MAX);
- ans+=f;
- }
- printf("%d\n",ans);
- }
- return ;
- }
- /*
- //
- //
- */
【最大流】BAPC2014 A Avoiding the Apocalypse (Codeforces GYM 100526)的更多相关文章
- 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- 【线段树】BAPC2014 E Excellent Engineers (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- 【扩展欧几里得】BAPC2014 I Interesting Integers (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- 【宽搜】BAPC2014 J Jury Jeopardy (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- 【模拟】BAPC2014 G Growling Gears (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- 【最短路】BAPC2014 B Button Bashing (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- Codeforces Gym 101190M Mole Tunnels - 费用流
题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...
- Codeforces Gym 101252D&&floyd判圈算法学习笔记
一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...
- Codeforces Gym 101623A - 动态规划
题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...
随机推荐
- 文档对象模型操作xml文档
简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规 ...
- hibernate中使用HQL进行数据库查询
1.写的规则比较简单,我讲一下,如图Station这个不是数据库中的表,而是entity包中的类名Station,可以省略 select * 2.返回的类型自动转化为String类型,不用你自己再转化 ...
- WisDom.Net 框架设计(二) 服务总线
WisDom.Net 框架设计--服务总线 1.Soa 简介 soa 就是面向服务的体系结构 是一个组件模型,不同的组件之间通过定义良好的接口联系起来.就像盖房子一块砖头一块砖头的砌墙,一片一 ...
- 将MVC中的Controllers、Model和View分别放到单独的项目中
Model: 新建-项目-Windows-类库 MVCTest.Model Controller:新建-项目-Windows-控制台应用程序 MVCTest.Bussiness Views:新建-项目 ...
- android调用系统图片浏览器裁切后出现黑边
是这样的:我使用系统的图片浏览器,然后让它自动跳到图片裁切界面,当我们定义了返回的图片大小过大,而我们实际的图片像素达不到时,系统为我们自动地填充了不够的像素成黑色,那么我们怎么样来解决这个问题呢?不 ...
- (whh仅供自己参考)进行ip网络请求的步骤
这个过程大致是这个样子: 1 添加通知 2 发送网络请求 里边有一个发送通知的操作 3 执行发送通知的具体操作 代码如下: 1 在VC添加通知 [[NSNotificationCenter defau ...
- JavaScript HTML DOM 元素(节点)
JavaScript HTML DOM 元素(节点) 创建新的 HTML 元素 创建新的 HTML 元素 如需向 HTML DOM 添加新元素,您必须首先创建该元素(元素节点),然后向一个已存在的元素 ...
- Java反射学习(java reflect)(三)
五.方法指针 据说JAVA方法指针的出现,是作为反射包的附产品 : 使用原理:Invoke被允许调用包装在当前Method对象的方法: 第一个参数为隐式参数,可用null,第二个参数为显示参数. Ex ...
- node http.get请求
var http = require('http'); var querystring = require('querystring') var url = 'http://www.baidu.com ...
- Direct 2D实现界面库 (1)
大学时尝试过很多次写一个UI库, 初次使用 GDI 绘图, 当时水平很低, GDI功能太弱, 以失败而告终. 之后使用 GDI+ 绘图, 当时水平依旧很低, GDI功能很强, 但效率实在太慢, 以失败 ...