3931: [CQOI2015]网络吞吐量

题目:传送门

题解:

  现在有点难受....跳了一个多钟...菜啊...

题意都把做法一起给了....最短路+网路流啊。

  不想说话...记得开long long

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
#define qread(x)x=read();
using namespace std;
typedef long long LL;
const LL INF=(1LL<<);
inline int read()
{
int f=,x=;char ch;
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return f*x;
}
struct edge
{
int x,y,next;LL d;
}e[];int last1[],len1;
void ins1(int x,int y,LL d)
{
len1++;
e[len1].x=x;e[len1].y=y;e[len1].d=d;
e[len1].next=last1[x];last1[x]=len1;
}
struct node
{
int x,y,next,other;LL d;
}a[];int last[],len;
void ins(int x,int y,LL d)
{
int k1,k2;
len++;k1=len;
a[len].x=x;a[len].y=y;a[len].d=d;
a[len].next=last[x];last[x]=len; len++;k2=len;
a[len].x=y;a[len].y=x;a[len].d=;
a[len].next=last[y];last[y]=len; a[k1].other=k2;
a[k2].other=k1;
}
int n,m;
int st,ed,head,tail;
int list[],h[];
bool bt_h()
{
memset(h,,sizeof(h));h[st]=;
list[]=st;head=;tail=;
while(head!=tail)
{
int x=list[head];
for(int k=last[x];k;k=a[k].next)
{
int y=a[k].y;
if(h[y]== && a[k].d>)
{
h[y]=h[x]+;
list[tail++]=y;
}
}
head++;
}
if(h[ed]>)return true;
return false;
}
LL find_flow(int x,LL flow)
{
if(x==ed)return flow;
LL s=,t;
for(int k=last[x];k;k=a[k].next)
{
int y=a[k].y;
if(h[y]==(h[x]+) && a[k].d> && flow>s)
{
t=find_flow(y,min(a[k].d,flow-s));
s+=t;
a[k].d-=t;a[a[k].other].d+=t;
}
}
if(s==)h[x]=;
return s;
}
LL dd[];
bool v[];
void spfa()
{
for(int i=;i<=n;i++)dd[i]=INF;
memset(v,true,sizeof(v));
memset(list,,sizeof(list));
list[]=st;dd[st]=;head=;tail=;
while(head!=tail)
{
int x=list[head];
for(int k=last1[x];k;k=e[k].next)
{
int y=e[k].y;
if(dd[y]>dd[x]+e[k].d)
{
//printf("%d %d\n",x,y);
dd[y]=dd[x]+e[k].d;
if(v[y]==true)
{
v[y]=false;
list[tail]=y;tail++;if(tail==n+)tail=;
}
}
}
list[head]=;
head++;if(head==n+)head=;
v[x]=true;
}
}
int main()
{
//freopen("network.in","r",stdin);
//freopen("network.out","w",stdout);
qread(n);qread(m);
len1=;memset(last1,,sizeof(last));
len=;memset(last,,sizeof(last));
memset(list,,sizeof(list));
st=;ed=n*;
for(int i=;i<=m;i++)
{
int x,y;LL d;
qread(x);qread(y);scanf("%lld",&d);
ins1(x,y,d);
ins1(y,x,d);
//printf("%d %d %lld\n",x,y,d);
}
spfa();
memset(list,,sizeof(list));
for(int i=;i<=n;i++)
{
LL x;scanf("%lld",&x);
if(i!= && i!=n)
{
ins(i,i+n,x);
//printf("%d %d\n",i,i+n);
}
}
ins(st,+n,INF);
ins(n,ed,INF);
for(int i=;i<=n;i++)
{
for(int k=last1[i];k;k=e[k].next)
{
int y=e[k].y;
if(dd[i]+e[k].d==dd[y])
{
ins(i+n,y,INF);
}
}
}
LL ans=;
while(bt_h())
ans+=find_flow(st,INF);
printf("%lld\n",ans);
return ;
}

bzoj3931: [CQOI2015]网络吞吐量(spfa+网络流)的更多相关文章

  1. [CQOI2015]网络吞吐量(网络流+SPFA)

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

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

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

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

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

  4. 3931: [CQOI2015]网络吞吐量【网络流】

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

  5. [bzoj3931][CQOI2015]网络吞吐量——最短路+网络流

    题目 传送门 题解 第一次一遍就AC一道bzoj上的题,虽然是一道水题... 我们做一边最短路,求出每个点的dist,然后再做一次类似spfa的操作,求出每个点是否可以用于建图. 在新图上拆点跑一边d ...

  6. BZOJ3931 [CQOI2015]网络吞吐量(最大流)

    没啥好说的,有写过类似的,就是预处理出最短路上的边建容量网络. #include<cstdio> #include<cstring> #include<queue> ...

  7. 【最短路】【最大流】bzoj3931 [CQOI2015]网络吞吐量

    跑出最短路图,然后把结点拆点跑最大流. #include<cstdio> #include<queue> #include<cstring> #include< ...

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

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

  9. 【BZOJ3931】[CQOI2015]网络吞吐量 最大流

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

随机推荐

  1. HDU 2841

    明显,当(X,Y)=1时,是可以看见的. 这题,记得POJ 上也有类似的一题... 不过比较奇怪的是,我以为会超时,因为范围达到了100000,但竟然直接枚举没超时.... #include < ...

  2. xpee.vbs

    xpee.vbs Win 8安装之后每一次重启桌面都会有一个360浏览器的快捷方式,终于找到原因了, 在Windows/System下面有这么个文件: Set ws = CreateObject(&q ...

  3. OPENWRT中SSH免密钥登陆(具体步骤)

    通过使用ssh-keygen生成公钥,在两台机器之间互相建立新人通道极客. 如果本地机器是client,远程机器为server. 1.使用ssh-keygen生成rsa keygen(在这里会覆盖曾经 ...

  4. python设计模式 之 简单工厂模式

    简单工厂模式属于类的创建型模式,适合用来对大量具有共同接口的类进行实例化,它能够推迟到执行的时候才动态决定要创建哪个类的实例.而不是在编译时就必须知道要实例化哪个类. python: #!/usr/b ...

  5. nyoj--1087--摆方格(规律)

    摆方格 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 给你一个n*n的方格,每个方格里的数必须连续摆放如 1 2 4 3 ,下图为不连续的,请输出从左上角到右下角的对角 ...

  6. nyoj--90--整数划分(母函数)

    整数划分 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk,  其中n1≥n2≥-≥nk≥1,k≥1.  正整数 ...

  7. 26.boost文件库

    #define _CRT_SECURE_NO_WARNINGS #include <boost/filesystem/operations.hpp> #include <boost/ ...

  8. BZOJ 2844 高斯消元 线性基

    思路: //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using ...

  9. java高级——暴力反射

    反射,java中一个比较高级的应用,主要和开发中的框架紧密相连.今天我们就介绍一下他的特性之一,暴力反射.(听名字很恐怖呦) package wo; public class A{ public St ...

  10. 前端的console.log的效果写法

    不说废话,直接上代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...