较水,但因为范围问题WA了两次。。。。

 /**************************************************************
Problem: 3931
User: idy002
Language: C++
Result: Accepted
Time:392 ms
Memory:3224 kb
****************************************************************/ #include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#define min(a,b) ((a)<(b)?(a):(b))
#define N 1100
#define M 200010
#define oo 0x3f3f3f3f
using namespace std; typedef long long dnt;
struct Pair {
int u;
dnt d;
Pair( int u, dnt d ):u(u),d(d){}
bool operator<( const Pair &p ) const { return d>p.d; }
};
struct Edge {
int u, v, f;
Edge( int u, int v, int f ):u(u),v(v),f(f){}
};
struct Dinic {
int src, dst;
vector<Edge> edge;
vector<int> g[N];
int dep[N], cur[N], qu[N], bg, ed;
void init( int src, int dst ) {
this->src = src;
this->dst = dst;
}
void adde( int u, int v, int f ) {
g[u].push_back( edge.size() );
edge.push_back( Edge(u,v,f) );
g[v].push_back( edge.size() );
edge.push_back( Edge(v,u,) );
}
bool bfs() {
memset( dep, , sizeof(dep) );
qu[bg=ed=] = src;
dep[src] = ;
while( bg<=ed ) {
int u=qu[bg++];
for( int t=; t<g[u].size(); t++ ) {
Edge &e = edge[g[u][t]];
if( e.f && !dep[e.v] ) {
dep[e.v] = dep[e.u]+;
qu[++ed] = e.v;
}
}
}
return dep[dst];
}
dnt dfs( int u, dnt a ) {
if( u==dst || a== ) return a;
dnt remain=a, past=, na;
for( int &t=cur[u]; t<g[u].size(); t++ ) {
Edge &e = edge[g[u][t]];
Edge &ve = edge[g[u][t]^];
if( e.f && dep[e.v]==dep[e.u]+ && (na=dfs(e.v,min(remain,e.f))) ) {
remain -= na;
past += na;
e.f -= na;
ve.f += na;
if( !remain ) break;
}
}
return past;
}
dnt maxflow() {
dnt rt = ;
while( bfs() ) {
memset( cur, , sizeof(cur) );
rt += dfs(src,0x3f3f3f3f3f3f3f3fll);
}
return rt;
}
}D; int n, m;
int head[N], cc[N], dest[M], wght[M], next[M], etot;
dnt dis[][N];
int in[N], out[N], src, dst, idc; void adde( int u, int v, int w ) {
etot++;
dest[etot] = v;
wght[etot] = w;
next[etot] = head[u];
head[u] = etot;
}
void dijstra( int src, dnt dis[] ) {
static bool done[N];
memset( done, false, sizeof(done) );
priority_queue<Pair> q;
q.push( Pair(src,) );
dis[src] = ;
while( !q.empty() ) {
Pair p = q.top();
q.pop();
int u=p.u;
if( done[u] ) continue;
done[u] = true;
for( int t=head[u]; t; t=next[t] ) {
int v=dest[t], w=wght[t];
if( dis[v]>dis[u]+w ) {
dis[v]=dis[u]+w;
q.push( Pair(v,dis[v]) );
}
}
}
}
void makeid() {
idc = ;
for( int i=; i<=n; i++ ) {
in[i] = ++idc;
out[i] = ++idc;
}
src = out[];
dst = in[n];
}
void build() {
memset( dis, 0x3f, sizeof(dis) );
dijstra( , dis[] );
dijstra( n, dis[] );
makeid();
D.init( src, dst );
for( int i=; i<=n; i++ )
if( dis[][n]==dis[][i]+dis[][i] )
D.adde( in[i], out[i], cc[i] );
for( int u=; u<=n; u++ )
for( int t=head[u]; t; t=next[t] ) {
int v=dest[t], w=wght[t];
if( dis[][u]+dis[][v]+w==dis[][n] )
D.adde( out[u], in[v], oo );
}
}
int main() {
scanf( "%d%d", &n, &m );
for( int i=,u,v,w; i<=m; i++ ) {
scanf( "%d%d%d", &u, &v, &w );
adde( u, v, w );
adde( v, u, w );
}
for( int i=; i<=n; i++ )
scanf( "%d", cc+i );
build();
printf( "%lld\n", D.maxflow() );
}

bzoj 3931 最短路+最大流的更多相关文章

  1. BZOJ 3931: [CQOI2015]网络吞吐量( 最短路 + 最大流 )

    最短路 + 最大流 , 没什么好说的... 因为long long WA 了两次.... ------------------------------------------------------- ...

  2. BZOJ 3931 网络吞吐量(最短路+拆点最大流)

    3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 1607  Solved: 652 [Submit][St ...

  3. hdu5294||2015多校联合第一场1007 最短路+最大流

    http://acm.hdu.edu.cn/showproblem.php? pid=5294 Problem Description Innocent Wu follows Dumb Zhang i ...

  4. 【最短路+最大流】上学路线@安徽OI2006

    目录 [最短路+最大流]上学路线@安徽OI2006 PROBLEM SOLUTION CODE [最短路+最大流]上学路线@安徽OI2006 PROBLEM 洛谷P4300 SOLUTION 先在原图 ...

  5. [bzoj 1449] 球队收益(费用流)

    [bzoj 1449] 球队收益(费用流) Description Input Output 一个整数表示联盟里所有球队收益之和的最小值. Sample Input 3 3 1 0 2 1 1 1 1 ...

  6. P3376 【模板】网络最大流——————Q - Marriage Match IV(最短路&最大流)

    第一道题是模板题,下面主要是两种模板,但都用的是Dinic算法(第二个题也是) 第一题: 题意就不需要讲了,直接上代码: vector代码: 1 //invalid types 'int[int]' ...

  7. bzoj 3931 [CQOI2015]网络吞吐量(最短路,最大流)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3931 [题意] 只能通过1-n的最短路,求网络最大流 [思路] 分别以1,n为起点做最 ...

  8. BZOJ 3931: [CQOI2015]网络吞吐量 最大流

    3931: [CQOI2015]网络吞吐量 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  9. 网络流(最大流) CQOI 2015 BZOJ 3931 网络吞吐量

    3931: [CQOI2015]网络吞吐量 Description 路由是指通过计算机网络把信息从源地址传输到目的地址的活 动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为路由器 ...

随机推荐

  1. CodeForces 1096E: The Top Scorer

    一道经典组合数学+容斥题. 题目传送门:CF1096E. 题意简述: \(p\) 个人,每个人有得分 \(a_i\). 总得分 \(\sum a_i = s\). 第一个人得分 \(a_1 \ge r ...

  2. linux下补丁制作及打补丁实例【转】

    转自:http://www.latelee.org/using-gnu-linux/diff-and-patch-on-linux.html 搞ARM有一段时日了,期间看了不少开发板的手册,手册的内容 ...

  3. Mysql_Learning_Notes_系统结构_1_数据类型

    数据类型 整型 1.tinyint 1Bytes -128~127(255) 2.smallint 2Bytes -32768~32676(65535) 3.mdeiumint 3Bytes -838 ...

  4. Python Challenge 第 5 关攻略:peak

    # -*- coding: utf-8 -*- # @Time : 2018/9/26 14:03 # @Author : cxa # @File : pickledemo.py # @Softwar ...

  5. Mac下破解intellij IDEA 2018

    一.在进入下面网站下载破解补丁 http://idea.lanyus.com/ 二.在“应用程序”中找到已经安装的IntelliJ IDEA,在app上右键,选择“显示包内容”,如下图: 将下载的破解 ...

  6. js实现ctrl+v粘贴图片或是截图

    浏览器环境:谷歌浏览器 1.ctrl+v粘贴图片都是监听paste时间实现的,复制的数据都存在clipboardData下面,虽然打印显示数据长度为0,但是还是可以获取数据的 2.打印clipboar ...

  7. mybatis 易百练习笔记

    1. session.commit()  增删改需要提交     session.close()    session需要关闭 2. insert  into t()   values()  不用写i ...

  8. wpf mvvm模式下的image绑定

    view文件 <Image Grid.Column="2" Width="48" Height="64" Stretch=" ...

  9. [Torch]的安装

    1 安装Torch 本文介绍Torch7的安装方法,因为本人安装Torch前安装了caffe,所以可能CUDA.cudnn.Blas等Torch可能需要用来的库的安装就不再重复介绍了,相关依赖出现问题 ...

  10. appium----adb shell输入中文/Emoji表情符(ADBKeyBoard)

    前序 “adb shell input textyoyo“ 可以通过adb 输入英文的文本,由于不支持unicode编码,所以无法输入中文,github上有个国外的大神写了个ADBKeyBoard输入 ...