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 ...
随机推荐
- 碰到故障大全---cd
office已安装32位,无法安装64位?解决方案:开始→运行→输入regedit,打开注册表编辑器,找到HKEY_CLASSES_ROOT\\Installer\\Products\ \000021 ...
- MySQL死锁原因分析
行级锁有三种模式: innodb 行级锁 record-level lock大致有三种:record lock, gap lock and Next-KeyLocks. record lock 锁住 ...
- 使用Ant编译Hadoop工程报错
在win7用Ant编译hadoop工程的时候,遇到了一个报错,如下: org.eclipse.core.runtime.CoreException: D:\workspace\hadoop-1.1.2 ...
- c#生成rsa公钥和私钥
c#生成rsa公钥和私钥的类库,包括加密解密,可以用在网站和winform项目 源码地址: http://download.csdn.net/detail/jine515073/8383809
- Ajax-ajax实例1-动态加载的 FAQ
动态加载 FAQ 的过程主要是利用 XMLHttpRequest(以下简称 XHR)对象与服务端通信,根据用户单击的感兴趣问题动态将内容加载到页面中.在具体实现时,有两点要注意的内容. 1 .对每个问 ...
- javac编译成功,用java运行class文件出现“找不到或无法加载主类” 的问题
1.pack后为包名,包与系统文件夹一一对应.并且代码中的包名不包含文件包的名字,即文件名 2.javac 按照*.java 文件的所在路径进行编译,编译完成后,使用java +完整包名(包含文件包名 ...
- e672. 缩放,剪取,移动,翻转缓冲图像
AffineTransform tx = new AffineTransform(); tx.scale(scalex, scaley); tx.shear(shiftx, shifty); tx.t ...
- Zookeeper 应用程序
Zookeeper为分布式环境提供灵活的协调基础架构.ZooKeeper框架支持许多当今最好的工业应用程序.我们将在本章中讨论ZooKeeper的一些最显着的应用. 雅虎 ZooKeeper框架最初是 ...
- erlang-百度云推送Android服务端功能实现-erlang
百度云推送官方地址http://developer.baidu.com/wiki/index.php?title=docs/cplat/push 简单的介绍下原理: 百度云推送支持IOS和Androi ...
- openal 基础知识3
四创新科技extension (Creative Labs'Extensions) 创新科技为OpenAL添加了多个extensions,许多都利用了他们声卡的特性. “Enumerate All”e ...