JZOJ.5331【NOIP2017模拟8.23】壕游戏
Description
Input
Output
Sample Input
6 8 2 2
4 5
1 2 4 0 2
1 3 5 0 2
3 4 1 5 1
2 5 1 0 1
4 6 4 2 2
5 6 0 4 2
1 5 5 9 2
2 6 4 5 2
Sample Output
16
Data Constraint
Hint
类似于一种可撤销的贪心,不难想到这是费用流的模型。
考虑到我们实际会用到的边比实际的边少很多,我们可以动态建边,以减少空间的使用,即当流过了一条边之后再建立第二次流过需要的边(如果有第二次的话)。
然后建立超级源点和超级汇点,跑个费用流就可以了..
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define M 4000105
#define N 1005
using namespace std;
bool visit[N];
int head[N],pre[N],num,n,m,k,s,dis[N],team[M*],l,r,ans;
struct data{
int next,to,flow,power,st,a,c,er;
}line[M];
void add(int u,int v,int x,int y,int z,int w){
num++;
line[num].st=u;
line[num].to=v;
line[num].next=head[u];
line[num].flow=w;
line[num].power=x+y;
line[num].a=x;
line[num].c=z;
line[num].er=num+;
head[u]=num;
num++;
line[num].st=v;
line[num].to=u;
line[num].next=head[v];
line[num].flow=;
line[num].power=-x-y;
line[num].a=x;
line[num].c=z;
line[num].er=num-;
head[v]=num;
}
void SPFA(){
int u=;
l=,r=;
team[]=;
visit[]=true;
dis[]=;
while (l<r){
u=team[++l];
for (int v=,i=head[u];i;i=line[i].next){
v=line[i].to;
if ((dis[v]>dis[u]+line[i].power)&&(line[i].flow)){
dis[v]=dis[u]+line[i].power;
pre[v]=i;
if (visit[v]==false){
team[++r]=v;
visit[v]=true;
}
}
visit[u]=false;
}
}
if (pre[n+]==-) ans=-;
}
void solve(){
ans+=dis[n+];
int i=pre[line[pre[n+]].st];
do{
line[i].flow--;
line[line[i].er].flow++;
line[i].c--;
if (line[i].c>)
add(line[i].st,line[i].to,line[i].a,line[i].power,line[i].c,);
line[i].c=;
line[line[i].er].c=;
i=pre[line[i].st];
}while (line[i].to!=);
}
int main(){
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
scanf("%d%d%d%d",&n,&m,&k,&s);
num=;
add(,,,,,);
for (int u,i=;i<=s;++i){
scanf("%d",&u);
add(u,n+,,,,);
}
for (int i=,u,v,x,y,z;i<=m;i++){
scanf("%d%d%d%d%d",&u,&v,&x,&y,&z);
add(u,v,x,y,z,);
}
ans=;
while (k--){
for (int i=;i<=n+;++i)
dis[i]=,visit[i]=false;
pre[n+]=-;
SPFA();
if (ans==-) break;
solve();
}
printf("%d\n",ans);
return ;
}
神奇的代码
改了一个晚上终于发现原来一条边流完后建立另一条边时原来边的C值(可流过次数)要清零QAQ)
当时考试的时候看出来是网络流不想写随便写了个SPFA水了水...
JZOJ.5331【NOIP2017模拟8.23】壕游戏的更多相关文章
- [jzoj 5343] [NOIP2017模拟9.3A组] 健美猫 解题报告 (差分)
题目链接: http://172.16.0.132/senior/#main/show/5343 题目: 题解: 记旋转i次之后的答案为$ans_i$,分别考虑每个元素对ans数组的贡献 若$s_i& ...
- JZOJ 【NOIP2017提高A组模拟9.14】捕老鼠
JZOJ [NOIP2017提高A组模拟9.14]捕老鼠 题目 Description 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠.于是,猫被农夫约派去捕 ...
- JZOJ 4732. 【NOIP2016提高A组模拟8.23】函数
4732. [NOIP2016提高A组模拟8.23]函数 (Standard IO) Time Limits: 1500 ms Memory Limits: 262144 KB Detailed ...
- JZOJ 5246. 【NOIP2017模拟8.8A组】Trip(trip)
5246. [NOIP2017模拟8.8A组]Trip(trip) (File IO): input:trip.in output:trip.out Time Limits: 1500 ms Memo ...
- JZOJ 5235. 【NOIP2017模拟8.7A组】好的排列
5235. [NOIP2017模拟8.7A组]好的排列 (File IO): input:permutation.in output:permutation.out Time Limits: 1000 ...
- JZOJ 5236. 【NOIP2017模拟8.7A组】利普希茨
5236. [NOIP2017模拟8.7A组]利普希茨 (File IO): input:lipschitz.in output:lipschitz.out Time Limits: 1000 ms ...
- JZOJ 5230. 【NOIP2017模拟A组模拟8.5】队伍统计
5230. [NOIP2017模拟A组模拟8.5]队伍统计 (File IO): input:count.in output:count.out Time Limits: 1500 ms Memory ...
- Python之模拟职场人生游戏
题目:模拟人生 要求:1.至少有两个角色 2.玩的过程中,有冲突 3.根据不同的交互,产生不同的行为. 4.一定要用到面向对象语法和思想 1.解题思路 创建一个类,赋予角色不同的方法,使用面向对象思想 ...
- 常用Java API之Ramdom--用代码模拟猜数小游戏
常用Java API之Ramdom Ramdom类用来生成随机数字.使用起来也是三个步骤: 1.导包 import java.util.Random; 2.创建 Random r = new Rand ...
随机推荐
- Android——对话框1(一般、选择、自定义、进度条)
xml <Button android:layout_width="match_parent" android:layout_height="wrap_conten ...
- C语言实现商品销售系统
商品销售系统 #include<stdio.h> //头文件 #include<string.h> //头文件 #include<stdlib.h> //头文件 # ...
- docker 部署nginx+weblogic集群
測试一段时间.再来报告
- Ajax-java中的ajax使用,以及编码问题
结合Ajax类使用:http://www.cnblogs.com/hfultrastrong/p/7267171.html javascript代码: <script type="te ...
- 搭建Grunt集成环境开发SASS
先行下载安装Ruby和SASS 再下载并安装node.js,已经集成了NPM 命令行查看是否安装成功 node -v npm -v 命令行安装grunt npm install -g grunt-cl ...
- 查询相应id下的数据
---恢复内容开始--- u方法这样的:带不起模板引擎 <a href="{:U('Del/wzxg','','')}/{$vo.id}">修改</a> 这 ...
- Android isUserAMonkey()
Monkey是Android上的一个自动化测试工具.产生随机事件由于压力测试等. ActivityManager.isUserAMonkey()判断当前是否有运行的Monkey测试.有就返回true. ...
- 静态库lib
步骤: 按普通方式编程,无需export 其中静态库就是中间文件,跟obj文件类似. 静态库的使用不太方便: 如果该静态库是vs2008编译的,那么APP也得用vs2008编译,版本必须一致.且编译方 ...
- 科技发烧友之单反佳能700d中高端
http://detail.zol.com.cn/series/15/15795_1.html 前三 佳能 尼康 索尼 佳能5d 1.6w 佳能70d 5k 佳能6d 9k 佳能d7100 5k 尼康 ...
- 转载:【原译】Erlang列表处理(Efficiency Guide)
转自:http://www.cnblogs.com/futuredo/archive/2012/10/22/2734186.html List handling 1 Creating a list ...