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 ...
随机推荐
- 怎样在IIS下配置PHP
首先下载Windows的PHP安装包.随后将该包解压至C:\PHP.完成上面的步骤后,将C:\php目录下的php.ini-dist文件改名为php.ini,然后拷到C:\Windows目录下. 用记 ...
- Jenkins+ Xcode+ 蒲公英 实现IOS自动化打包和分发
Jenkins+ Xcode+ 蒲公英 实现IOS自动化打包和分发 直接入正题: Screen Shot 2015-09-18 at 16.56.20.png Mac上安装Jekins jekins下 ...
- iOS边练边学--UITableViewCell的常见属性设置
// 取消选中的样式(常用) 让当前 cell 按下无反应 cell.selectionStyle = UITableViewCellSelectionStyleNone; // 设置选中的背景色,U ...
- etl数据库查询
//----------------------------------------利用数据库查询按钮查询-------------------------------------------- st ...
- QT全局宏变量的实现
qt中如何实现定义一个宏,在整个工程中都可以实现呢?下面我来写一个亲测的例子: pro中添加如下宏定义代码: DEFINES += HELLO=\"$$PWD/\" DEFINES ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (一)
2D文字聊天界面大致预期实现文字输入.发送消息.接收消息.你可以通过点击按钮让机器人开启聊天模式或者学习模式.又或是进入3D语音聊天界面或者退出. 目背景 (1) 开发动机的形态 随着科技的进步与生活 ...
- j2se j2ee j2me
多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(package)的形式提供,不同版本的Java提供不同的包,以面向特定的应用. Java2平台包括标准版(J2SE).企业 ...
- tensorflow 单机多GPU mnist实例
http://blog.csdn.net/guotong1988/article/details/74748806 如何使用多GPU http://wiki.jikexueyuan.com/proje ...
- 初涉RxAndroid结合Glide实现多图片载入操作
转载请注明出处:王亟亟的大牛之路 本来周末就想发了然后各种拖拉就没有然后了,那么就今天早上写吧,废话不多開始正题 什么是RxJava或者RxAndroid我就不多废话了,理论知识一大堆人给我们做好了. ...
- CentOS 6.5 下利用命令行截图及设置快捷键截图
CentOS 6.5 下利用命令行截图及设置快捷键截图 1.利用命令模式 捕获整个屏幕 : $ gnome-screenshot 截完屏之后我们可以设置自定义图片存储位置,如图: 捕获当前终端Term ...