P4542 [ZJOI2011]营救皮卡丘(Floyd+网络流)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define N 505
#define M 200005
int n,m,k,S,T0,T,tC,dis[N][N],d[N],a[N],p[N];
queue <int> h; bool inh[N];
int cnt=,hd[N],nxt[M],ed[N],poi[M],val[M],cst[M];
inline void adde(int x,int y,int v1,int v2){
nxt[ed[x]]=++cnt, hd[x]=hd[x]?hd[x]:cnt,
ed[x]=cnt, poi[cnt]=y, val[cnt]=v1, cst[cnt]=v2;
}
inline void link(int x,int y,int v1,int v2){adde(x,y,v1,v2),adde(y,x,,-v2);}
bool bfs(){
memset(d,,sizeof(d)); int Inf=d[];
h.push(S); inh[S]=; a[S]=Inf; d[S]=;
while(!h.empty()){
int x=h.front(); h.pop(); inh[x]=;
for(int i=hd[x];i;i=nxt[i]){
int to=poi[i];
if(val[i]>&&d[to]>d[x]+cst[i]){
d[to]=d[x]+cst[i]; p[to]=i;
a[to]=min(a[x],val[i]);
if(!inh[to]) h.push(to),inh[to]=;
}
}
}if(d[T]==Inf) return ;
tC+=a[T]*d[T];
for(int i=T;i!=S;i=poi[p[i]^])
val[p[i]]-=a[T],val[p[i]^]+=a[T];
return ;
}
void Floyd(){
memset(dis,,sizeof(dis));
for(int i=;i<=n;++i) dis[i][i]=;
for(int i=,u,v,w;i<=m;++i){
scanf("%d%d%d",&u,&v,&w);
dis[u][v]=dis[v][u]=min(dis[v][u],w);
}
for(int k=;k<=n;++k)
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
if(k<=i||k<=j)//不能从大的转移回来
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
int main(){
scanf("%d%d%d",&n,&m,&k); Floyd();
S=n*+; T=S+;
for(int i=;i<=n;++i)
link(S,i,,),link(i+n+,T,,);
link(S,,k,);//最大流量限制为k
for(int i=;i<=n;++i)
for(int j=i+;j<=n;++j)
link(i,j+n+,,dis[i][j]);
while(bfs());
printf("%d",tC);
return ;
}
P4542 [ZJOI2011]营救皮卡丘(Floyd+网络流)的更多相关文章
- 【BZOJ2324】[ZJOI2011]营救皮卡丘(网络流,费用流)
[BZOJ2324][ZJOI2011]营救皮卡丘(网络流,费用流) 题面 BZOJ 洛谷 题解 如果考虑每个人走的路径,就会很麻烦. 转过来考虑每个人破坏的点集,这样子每个人可以得到一个上升的序列. ...
- BZOJ 2324: [ZJOI2011]营救皮卡丘( floyd + 费用流 )
昨晚写的题...补发一下题解... 把1~N每个点拆成xi, yi 2个. 预处理i->j经过编号不超过max(i,j)的最短路(floyd) S->0(K, 0), S->xi(1 ...
- 洛咕P4542 [ZJOI2011]营救皮卡丘
套路题? 感觉讲不清,先写建图 把每个点拆成两个,A和B, S->Ai流量=1费用=0,Bi->T流量=1费用=0, Ai->Bj流量=1费用=ij最短路 还有一个特殊的s点,S-& ...
- P4542 [ZJOI2011]营救皮卡丘
题目链接 题意分析 我们仔细分析一下 发现题目要求用最多\(k\)条路径实现最小权覆盖 首先由于最小路径覆盖针对的是有向图 但是这是一个无向图 所以我们面向对象编程 我们维护一个数组\(d[i][j] ...
- bzoj 2324 [ZJOI2011]营救皮卡丘(floyd,费用流)
2324: [ZJOI2011]营救皮卡丘 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1777 Solved: 712[Submit][Stat ...
- 【BZOJ2324】[ZJOI2011]营救皮卡丘 有上下界费用流
[BZOJ2324][ZJOI2011]营救皮卡丘 Description 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘,也为了正义,小智和他的朋友们义不容辞的 ...
- bzoj2324 [ZJOI2011]营救皮卡丘 费用流
[ZJOI2011]营救皮卡丘 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2653 Solved: 1101[Submit][Status][D ...
- BZOJ2324: [ZJOI2011]营救皮卡丘
2324: [ZJOI2011]营救皮卡丘 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1359 Solved: 522[Submit][Stat ...
- 【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流
原文地址:http://www.cnblogs.com/GXZlegend/p/6832504.html 题目描述 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘 ...
随机推荐
- C# 模拟页面登录
using System; using System.Collections; using System.Collections.Generic; using System.IO; using Sys ...
- Oracle单引号转义符
作用:Increase readability and usability (增加可读性和可用性) 用法:select q'[ select * from ]'||table_name|| ';' ...
- Windows安装Scrapy(转)
转自: http://www.nnzhp.cn/archives/558 Scrapy是python开发的一个爬虫框架,如果你要学习它的话,可能第一步在安装的时候,就会遇到很多问题,因为Scrapy很 ...
- tomcat 部署指南
下载与安装 个人建议不要使用发行版带的版本, 始终从主页来下载安装, 下载地址位于[1], 安装方法很简单, 直接解压即可, 建议解压到 /usr/local/ 目录, 再链接到 /usr/local ...
- iOS10以上App请求用户授权系统设置权限
<key>NSAppleMusicUsageDescription</key> <string>使用媒体资源</string> <key>N ...
- Xib中用自动布局设置UIScrollView的ContenSize
1. 在UIScrollView上拖一个UIView 2.设置UIScrollView上下左右约束为0,设置UIView上下左右约束为0,并且设置水平中线约束.那么可以把水平中线约束拖到对应视图,利用 ...
- php中换行怎么写
PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性 unix系列用(推荐学习:PHP编程从入门到精通) 1 windows系列用 1 \r\n mac用 1 如: 1 2 3 4 5 6 ...
- 【HDOJ6614】AND Minimum Spanning Tree(签到)
题意:给定标号从1到n的n个点,链接两个点x,y的代价为x AND y,求最小生成树总代价与满足代价最小的前提下字典序最小的方案 n<=2e5 思路: #include<bits/stdc ...
- NuGet-Doc:NuGet.Server
ylbtech-NuGet-Doc:NuGet.Server 1.返回顶部 1. NuGet.Server 2018/03/13 NuGet.Server 是由 .NET Foundation 提供的 ...
- flutter 按键监听
import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; void main() => ru ...