●BZOJ 3931 [CQOI2015]网络吞吐量
题链:
http://www.lydsy.com/JudgeOnline/problem.php?id=3931
题解:
在最短路图上跑网络流,要开long long
(无奈 BZOJ AC 不了,洛谷上 wa 了一个点。改不出来了诶)
代码:
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
struct Edge{
ll to[500000],cap[500000],nxt[500000],head[2000],ent;
void Init(){ent=2;}
void Adde(ll u,ll v,ll w){
to[ent]=v; cap[ent]=w; nxt[ent]=head[u]; head[u]=ent++;
}
ll Next(ll i,bool type){
return type?head[i]:nxt[i];
}
}E1,E2;
ll dis[2000],d[2000],cur[2000];
ll N,M,S,T;
ll idx(ll u,ll k){
return u+N*k;
}
struct cmp{
bool operator ()(ll a,ll b){
return dis[a]>dis[b];
}
};
void Dijkstra(){
static bool vis[2000];
priority_queue<ll,vector<ll>,cmp>q;
memset(dis,0x3f,sizeof(dis));
dis[1]=0; q.push(1); ll u,v,w;
while(!q.empty()){
u=q.top(); q.pop();
if(vis[u]) continue; vis[u]=1;
for(ll i=E1.Next(u,1);i;i=E1.Next(i,0)){
v=E1.to[i],w=E1.cap[i];
if(dis[v]<=dis[u]+w) continue;
dis[v]=dis[u]+w;
q.push(v);
}
}
}
bool bfs(){
queue<ll> q;
memset(d,0,sizeof(d));
d[S]=1; q.push(S); ll u,v;
while(!q.empty()){
u=q.front(); q.pop();
for(ll i=E2.Next(u,1);i;i=E2.Next(i,0)){
v=E2.to[i];
if(d[v]||!E2.cap[i]) continue;
d[v]=d[u]+1; q.push(v);
}
}
return d[T];
}
ll dfs(ll u,ll reflow){
if(u==T||!reflow) return reflow;
ll flowout=0,f,v;
for(ll &i=cur[u];i;i=E2.Next(i,0)){
v=E2.to[i];
if(d[v]!=d[u]+1) continue;
f=dfs(v,min(reflow,E2.cap[i]));
flowout+=f; E2.cap[i^1]+=f;
reflow-=f; E2.cap[i]-=f;
if(!reflow) break;
}
if(!flowout) d[u]=0;
return flowout;
}
ll Dinic(){
ll flow=0;
while(bfs()){
memcpy(cur,E2.head,sizeof(E2.head));
flow+=dfs(S,INF);
}
return flow;
}
int main()
{
E1.Init(); E2.Init();
scanf("%lld%lld",&N,&M);S=idx(1,1); T=idx(N,0);
for(ll i=1,u,v,w;i<=M;i++){
scanf("%lld%lld%lld",&u,&v,&w);
E1.Adde(u,v,w); E1.Adde(v,u,w);
}
Dijkstra();
for(ll u=1;u<=N;u++)
for(ll i=E1.Next(u,1);i;i=E1.Next(i,0)){
ll v=E1.to[i],w=E1.cap[i];
if(dis[u]+w!=dis[v]) continue;
E2.Adde(idx(u,1),idx(v,0),INF);
E2.Adde(idx(v,0),idx(u,1),0);
}
for(ll i=1,x;i<=N;i++){
scanf("%lld",&x);
E2.Adde(idx(i,0),idx(i,1),x);
E2.Adde(idx(i,1),idx(i,0),0);
}
ll ans=Dinic();
printf("%lld",ans);
return 0;
}
●BZOJ 3931 [CQOI2015]网络吞吐量的更多相关文章
- BZOJ 3931: [CQOI2015]网络吞吐量
3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1555 Solved: 637[Submit][Stat ...
- BZOJ 3931: [CQOI2015]网络吞吐量 最大流
3931: [CQOI2015]网络吞吐量 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- BZOJ 3931: [CQOI2015]网络吞吐量( 最短路 + 最大流 )
最短路 + 最大流 , 没什么好说的... 因为long long WA 了两次.... ------------------------------------------------------- ...
- bzoj 3931: [CQOI2015]网络吞吐量 -- 最短路+网络流
3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec Memory Limit: 512 MB Description 路由是指通过计算机网络把信息从源地址传输到目的地址 ...
- bzoj 3931 [CQOI2015]网络吞吐量(最短路,最大流)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3931 [题意] 只能通过1-n的最短路,求网络最大流 [思路] 分别以1,n为起点做最 ...
- BZOJ 3931 [CQOI2015]网络吞吐量:最大流【拆点】
传送门 题意 给你一个 $ n $ 个点,$ m $ 条边的无向网络,每条边有长度.每个点的流量限制为 $ c[i] $ . 要求流量只能经过从 $ 1 $ 的 $ n $ 的最短路.问你最大流是多少 ...
- BZOJ 3931: [CQOI2015]网络吞吐量 Dijkstra+最大流
这个没啥难的. 只保留可以转移最短路的边,然后拆点跑一个最大流即可. #include <bits/stdc++.h> #define N 1004 #define M 250004 #d ...
- 3931: [CQOI2015]网络吞吐量
3931: [CQOI2015]网络吞吐量 链接 分析: 跑一遍dijkstra,加入可以存在于最短路中的点,拆点最大流. 代码: #include<cstdio> #include< ...
- 3931: [CQOI2015]网络吞吐量【网络流】
网络吞吐量(network)题目描述路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为路由器.为了使数据包最快的到达目的地,路 ...
随机推荐
- 201621123060《JAVA程序设计》第三周学习总结
1. 本周学习总结 1.1写出你认为本周学习中比较重要的知识点关键词,如类.对象.封装等. 关键词:类.方法.属性.对象.多态.继承.封装.面向对象.> 1.2 用思维导图或者Onenote或其 ...
- iOS开发之Objective-C与JavaScript的交互
UIWebView是iOS最常用的SDK之一,它有一个stringByEvaluatingJavaScriptFromString方法可以将javascript嵌入页面中,通过这个方法我们可以在iOS ...
- 从源码角度看LinkedList一些基本操作(jdk1.7)
介绍 LinkedList是一个双向链表,就像下图展示那样,每个节点有个指向上个元素和一个指向下个元素的指针. 接下来我会对我们经常使用的方法进行介绍,代码如下 @Test public void t ...
- ResNet
 上图为单个模型 VGGNet, GoogleNet 都说明了深度对于神经网络的重要性. 文中在开始提出: 堆叠越多的层, 网络真的能学习的越好吗? 然后通过神经网络到达足够深度后出现的退化(deg ...
- Filter 和 interceptor 的区别
1. 拦截器 interceptor ● 特点:interceptor 依赖于web框架,在Spring<MV中就是依赖于springMVC框架.在实现上是基于Java的反射机制,属于面向切面编 ...
- ThreadLocal源码分析:(三)remove()方法
在ThreadLocal的get(),set()的时候都会清除线程ThreadLocalMap里所有key为null的value. 而ThreadLocal的remove()方法会先将Entry中对k ...
- lua保存table到文件并从文件解析成table
require("json") result = { ["ip"]="192.168.0.177", ["date"]= ...
- clang++ 链接问题 和 VS Code
clang++ 链接问题 和 VS Code 如果你在windows上使用clang 并且同时安装有vs和mingw, clang链接是会自动使用msvs, 链接时会有LINK error LINK ...
- kali linux 2.0 web 渗透测试 电子书
原创 2017-05-31 玄魂工作室 玄魂工作室 打起精神,重新开启订阅号的原创文章写作工作,但是需要点时间,请耐心等待. 求资料的同学,没有及时回复的,请再次留言,我会尽快处理.今天分享两本电子书 ...
- 分布式版本控制系统Git的安装及使用
Git的安装分为客户端安装和服务端安装,鉴于我平时码代码在windows环境下,因此本文客户端安装直接在windows环境,服务端安装在linux环境下(centos). Git客户端安装 客户端下载 ...