传送门

首先跑一遍最短路,如果一条边满足\(dis[v]=dis[u]+w[i]\),那么这条边就在最短路中,把它加进网络流的图里

然后点的流量限制的话拆点,把每个点拆成两个,中间连边来限制流量

最后跑一遍最大流即可,注意两张图不要弄混掉,还有要开\(long\ long\),\(inf\)也要大一点

以上是题解,以下是粗口

出题人我,数据范围大你说一声,我头一次见不开\(int\)和\(inf\)开小直接爆零的你数据好歹出的有点梯度结果我还以为自己哪里打错了找了半天最后只好去看题解才发现要开\(long\ long\)我

//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define inf 1e18
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(R int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
#define gg(u) for(int &i=cur[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
R int res,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
const int N=1005,M=5e5+5;
struct eg{int v,nx;ll w;};int n,m,S,T;
struct net{
eg e[M];int head[N],tot=1;
inline void add(R int u,R int v,R ll w){
e[++tot]={v,head[u],w},head[u]=tot;
e[++tot]={u,head[v],0},head[v]=tot;
}
int q[N],cur[N],dep[N],h,t,u;
bool bfs(){
fp(i,S,T)cur[i]=head[i],dep[i]=-1;
q[h=t=1]=S,dep[S]=0;
while(h<=t){
int u=q[h++];
go(u)if(e[i].w&&dep[v]<0){
dep[v]=dep[u]+1,q[++t]=v;
if(v==T)return true;
}
}return false;
}
ll dfs(int u,ll lim){
if(u==T||!lim)return lim;
ll flow=0,f;
gg(u)if(dep[v]==dep[u]+1&&(f=dfs(v,min(lim,e[i].w)))){
flow+=f,lim-=f;
e[i].w-=f,e[i^1].w+=f;
if(!lim)break;
}return flow;
}
ll dinic(){ll flow=0;while(bfs())flow+=dfs(S,inf);return flow;}
}TT;
struct dis{
eg e[M];int head[N],tot=1;
inline void add(R int u,R int v,R ll w){e[++tot]={v,head[u],w},head[u]=tot; }
int vis[N],h,t,u,v,w,q[N];ll dis[N];
void spfa(){
fp(i,1,n)dis[i]=inf,vis[i]=0;
dis[1]=0,h=0,t=1,q[0]=1;
while(h!=t){
u=q[h++],vis[u]=0;if(h==N)h=0;
go(u)if(dis[v]>dis[u]+e[i].w){
dis[v]=dis[u]+e[i].w;
if(!vis[v]){
vis[v]=1,q[t++]=v;
if(t==N)t=0;
}
}
}
}
void MAIN(){
n=read(),m=read(),S=0,T=(n<<1)+1;
fp(i,1,m)u=read(),v=read(),w=read(),add(u,v,w),add(v,u,w);
spfa();fp(u,1,n)go(u)if(dis[v]==dis[u]+e[i].w)TT.add(u+n,v,inf);
fp(i,1,n)w=read(),TT.add(i,i+n,w);
TT.add(1,1+n,inf),TT.add(n,n+n,inf),TT.add(S,1,inf),TT.add(n+n,T,inf);
printf("%lld\n",TT.dinic());
}
}G;
signed main(){
// freopen("testdata.in","r",stdin);
G.MAIN();return 0;
}

P3171 [CQOI2015]网络吞吐量的更多相关文章

  1. 洛谷 P3171 [CQOI2015]网络吞吐量 解题报告

    P3171 [CQOI2015]网络吞吐量 题目描述 路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为路由器.为了使数据包最 ...

  2. BZOJ 3931 / Luogu P3171 [CQOI2015]网络吞吐量 (最大流板题)

    题面 中文题目,不解释: BZOJ传送门 Luogu传送门 分析 这题建图是显然的,拆点后iii和i′i'i′连容量为吞吐量的边,根据题目要求,111和nnn的吞吐量看作∞\infty∞. 然后用di ...

  3. BZOJ 3931: [CQOI2015]网络吞吐量

    3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1555  Solved: 637[Submit][Stat ...

  4. bzoj3931: [CQOI2015]网络吞吐量

    将最短路图找出来,跑maxflow即可.有注意到数据范围.然后输出的时候%dWA了三次QAQ... #include<cstdio> #include<cstring> #in ...

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

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

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

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

  7. 3931: [CQOI2015]网络吞吐量

    3931: [CQOI2015]网络吞吐量 链接 分析: 跑一遍dijkstra,加入可以存在于最短路中的点,拆点最大流. 代码: #include<cstdio> #include< ...

  8. bzoj千题计划136:bzoj3931: [CQOI2015]网络吞吐量

    http://www.lydsy.com/JudgeOnline/problem.php?id=3931 在最短路网络上跑最大流 #include<queue> #include<c ...

  9. bzoj 3931: [CQOI2015]网络吞吐量 -- 最短路+网络流

    3931: [CQOI2015]网络吞吐量 Time Limit: 10 Sec  Memory Limit: 512 MB Description 路由是指通过计算机网络把信息从源地址传输到目的地址 ...

随机推荐

  1. P2863 [USACO06JAN]牛的舞会The Cow Prom

    洛谷——P2863 [USACO06JAN]牛的舞会The Cow Prom 题目描述 The N (2 <= N <= 10,000) cows are so excited: it's ...

  2. navicat 无法连接到腾讯云Mysql

    远程连接进入服务器 远程连接进入服务器之后,输入命令mysql -u root -p 之后输入mysql密码,进入mysql 命令环境 设置开启远程登录 GRANT ALL PRIVILEGES ON ...

  3. why在重写equals时还必须重写hashcode方法

    首先我们先来看下String类的源码:可以发现String是重写了Object类的equals方法的,并且也重写了hashcode方法 public boolean equals(Object anO ...

  4. linux 查找目录下的文件内容并替换(批量)

    2.sed和grep配合 命令:sed -i s/yyyy/xxxx/g `grep yyyy -rl --include="*.txt" ./` 作用:将当前目录(包括子目录)中 ...

  5. DLL混淆

  6. 一个基于JBoss5.1+EJB3.0 登陆应用

    花了几天的时间研究了一下EJB的使用,一直以来都主要是在写终端中的程序,对Java框架的相关的开发非常不熟悉,中间遇到了不少麻烦,还好总算都攻克了.写篇日志记录一下. 经验总结 为什么选择JBoss5 ...

  7. [Bash] Create nested folder in Bash

    We can create a single folder by doing: mkdir onefolder If we want to create nested folder we need t ...

  8. jQuery选择器特殊字符与属性空格问题

    一.选择器中含有特殊符号的注意事项 1.选择器中含有“.”.“#”.“(”或“]”等特殊字符 根据W3C的规定,属性值中是不能含有这些特殊字符的,但在实际项目中偶尔会遇到表达式中含有“#”和“.”等特 ...

  9. 机器学习笔记之PCA-SIFT总结

    不多说,直接上干货! PCA-SIFT算法在描述子构建上作了创新,主要是 将统计学中的主成分分析(PCA)应用于对描述子向量的降维,以提高匹配效率 . PCA 的原理是:一般有效信号的方差大,噪声的方 ...

  10. 【bzoj2152】【聪聪可可】【点分治】

    [问题描写叙述] 聪聪和可但是兄弟俩.他们俩常常为了一些琐事打起来,比如家中仅仅剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(但是他们家仅仅有一台电脑)--遇到这样的问题,普通情况下石头剪刀布就好 ...