洛谷3171 网络吞吐量(网络流)

t开成n结果cur赋值的时候也只赋值到t令人智熄

【题目分析】

好吧我承认这个错误真的呵呵。。。。。。。。

题目有那~~~~~么长,然后画画图这道题就基本看出正解了,再一看数据范围,n<=500简直良心,好了,网络流没得跑了。

因为按最短路进行传递,所以网络流的建图肯定是在最短路的基础上,所以先进行一次SPFA。

考虑一条路如果加入网络流的图,那么这条路一定是在最短路上,dfs一次即可。

然后考虑拆点限制流量(一开始sb的写成了边权结果还跑过了样例然后一交立马咕咕),最后跑最大流即可。

PS:此题还有一个坑点,就是INF要设的很大很大,否则咕咕。

【代码~】

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MAXN=1e3+10;
const LL MAXM=4e5+10;
const LL INF=0x3f3f3f3f3f;LL n,m,cnt,s,t;
LL head[MAXN],cur[MAXN],depth[MAXN],val[MAXN];
LL nxt[MAXM],to[MAXM],w[MAXM];
LL cnt1,head1[MAXN];
LL nxt1[MAXM],to1[MAXM],w1[MAXM];
LL dis[MAXN],vis[MAXN];LL Read()
{LL i=0,f=1;char c;for(c=getchar();(c>'9'||c<'0')&&c!='-';c=getchar());if(c=='-')f=-1,c=getchar();for(;c>='0'&&c<='9';c=getchar())i=(i<<3)+(i<<1)+c-'0';return i*f;
}void sc(LL x)
{if(x>=10)sc(x/10);putchar(x%10+48);
}void Add1(LL x,LL y,LL z)
{cnt1++;nxt1[cnt1]=head1[x];head1[x]=cnt1;to1[cnt1]=y;w1[cnt1]=z;
}void add1(LL x,LL y,LL z)
{Add1(x,y,z);Add1(y,x,z);
}void SPFA()
{queue<LL> q;memset(dis,0x3f3f3f3f,sizeof(dis));dis[s]=0;q.push(s);while(!q.empty()){LL u=q.front();q.pop();vis[u]=0;for(LL i=head1[u];i!=-1;i=nxt1[i]){LL v=to1[i];if(dis[v]>dis[u]+w1[i]){dis[v]=dis[u]+w1[i];if(!vis[v]){vis[v]=1;q.push(v);}}}}
}void Add(LL x,LL y,LL z)
{nxt[cnt]=head[x];head[x]=cnt;to[cnt]=y;w[cnt]=z;cnt++;
}void add(LL x,LL y,LL z)
{Add(x,y,z);Add(y,x,0);
}bool bfs()
{queue<LL> q;memset(depth,0,sizeof(depth));depth[s]=1;q.push(s);while(!q.empty()){LL u=q.front();q.pop();for(LL i=head[u];i!=-1;i=nxt[i]){LL v=to[i];if(!depth[v]&&w[i]){depth[v]=depth[u]+1;q.push(v);}}}if(depth[t]==0)return false;return true;
}LL dfs(LL u,LL dist)
{if(u==t)return dist;for(LL &i=cur[u];i!=-1;i=nxt[i]){LL v=to[i];if(depth[v]==depth[u]+1&&w[i]){LL di=dfs(v,min(dist,w[i]));if(di>0){w[i]-=di;w[i^1]+=di;return di;}}}return 0;
}LL dinic()
{LL ans=0;while(bfs()){for(LL i=s;i<=t+n;++i)cur[i]=head[i];while(LL d=dfs(s,INF))ans+=d;}return ans;
}void buildgraph(LL u,LL fa)
{for(LL i=head1[u];i!=-1;i=nxt1[i]){LL v=to1[i];if(v==fa)continue;if(dis[v]==dis[u]+w1[i]){add(u+n,v,INF);buildgraph(v,u);}}
}int main()
{memset(head1,-1,sizeof(head1));memset(head,-1,sizeof(head));n=Read(),m=Read();s=1,t=n;for(LL i=1;i<=m;++i){LL x=Read(),y=Read(),z=Read();add1(x,y,z);}for(LL i=1;i<=n;++i)val[i]=Read();SPFA();buildgraph(1,-1);add(1,n+1,INF);for(LL i=2;i<n;++i)add(i,i+n,val[i]);sc(dinic());return 0;
}

 

转载于:https://www.cnblogs.com/Ishtar/p/10010755.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DIV+CSS布局的优势和弊端

DIVCSS的优势1、符合W3C标准。这保证您的网站不会因为将来网络应用的升级而被淘汰。2、对浏览者和浏览器更具亲和力。由于CSS富含丰富的样式&#xff0c;使页面更加灵活性&#xff0c;它可以根据不同的浏览器&#xff0c;而达到显示效果的统一和不变形。这样就支持浏览器的向后…

Android Studio --- [学习笔记]TCP(第2弹)、GridView、ScrollView

说明 这篇主要接上一篇Android Studio — > [学习笔记]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手对上面回答的细解,并用JS伪代码,对TCP三次握手和四次挥手的简单实现.Android的基本了解到此篇结束,后续会根据具体情况深度学习. 2.y TCP的三次握手和四次挥…

MySQL中varchar最大长度是多少

一. varchar存储规则&#xff1a; 4.0版本以下&#xff0c;varchar(20)&#xff0c;指的是20字节&#xff0c;如果存放UTF8汉字时&#xff0c;只能存6个&#xff08;每个汉字3字节&#xff09; 5.0版本以上&#xff0c;varchar(20)&#xff0c;指的是20字符&#xff0c;无论存放…

bzoj 1232: [Usaco2008Nov]安慰奶牛cheer【最小生成树】

有趣 每条边在算答案的时候被算了二倍的边权值加上两个端点的权值&#xff0c;然后睡觉点额外加一次 所以可以用这个权做MST&#xff0c;然后加上点权最小的点 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N1…

JavaScript --- [学习笔记]观察者模式 理解对象 工厂模式 构造函数模式

说明 本系列(JS基础梳理)为后面TCP的模拟实现做准备本篇的主要内容: 观察者模式、工厂模式、构造函数模式 和 对对象的理解 1. 观察者模式 参考JavaScript设计模式 1.1 消息注册方法 “将订阅者注册的消息推入到消息队列中” [算法思路] : 在推入到消息队列时,如果此消息…

java_day19_MVC和配置文件

简单的MVC设计 MVC的全名是Model View Controller&#xff0c;是模型(model)&#xff0d;视图(view)&#xff0d;控制器(controller)的缩写&#xff0c;是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码&#xff0c;将众多的业务逻辑聚集到一个部件…

Problem I: 打印金字塔

#include<stdio.h> int main() {int n,i,j,k;scanf("%d",&n);for(i1;i<n;i){for(j1;j<n-i;j)printf(" ");for(k1;k<2*i-1;k)printf("*");printf("\n");}return 0; } HINT 用双重循环做&#xff0c;外循环代表行数&…

webpack --- 发布环境的配置 代码压缩 代码分类

说明 源代码本篇主要对发布环境的配置说明前面2点是对webpack的一个复习.第3点开始,逐步配置部署代码 1. Webpack发布的策略 2.1 在实际开发中,一般会有两套方案: 开发期间的项目:包含了测试文件、测试数据、开发工具、测试工具等相关配置,有利于项目的开发和测试,但是这些文…

salesforce lightning零基础学习(三) 表达式的!(绑定表达式)与 #(非绑定表达式)

在salesforce的classic中&#xff0c;我们使用{!expresion}在前台页面展示信息&#xff0c;在lightning中&#xff0c;上一篇我们也提及了&#xff0c;如果展示attribute的值&#xff0c;可以使用{!v.expresion}展示信息。 lightning在component中解析动态值的时候&#xff0c;…

sqlserver学习3---sql函数

一、SQL DML 和 DDL 可以把 SQL 分为两个部分&#xff1a;数据操作语言 (DML) 和 数据定义语言 (DDL)。 SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。 查询和更新指令构成了 SQL 的 DML 部分&#xff1a; SELECT - 从数据库…

JavaScript --- [学习笔记] 原型模式

说明 接JavaScript — > [学习笔记]观察者模式 & 理解对象 & 工厂模式 & 构造函数模式上一篇构造函数模式创建的实例,不同实例的同一个方法是不相等的,为了解决这个问题.出现了原型模式 1. 原型模式 具体做法是,不在构造函数中定义对象实例的信息,而是将这些…

网络协议各层概述

网络协议概述 OSI是一个开放性的通信系统互连参考模型&#xff0c;他是一个定义得非常好的协议规范。OSI模型有7层结构&#xff0c;每层都可以有几个子层。 OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层&#xff1b; 其中高层&…

A start job is running for Raise network interface(5min 13s )问题解决方法

命令&#xff1a;sudo vim /etc/systemd/system/network-online.target.wants/networking.service将里面的TimeoutStartSec5min 修改为TimeoutStartSec2sec 然后重启系统&#xff0c;就可以生效了&#xff0c;开机速度很快 转载于:https://www.cnblogs.com/sea-stream/p/98615…

javascript --- 实现对象的深拷贝

浅拷贝和深拷贝 浅拷贝: 只拷贝一层.当对象是复杂数据类型(Object、 Array)时,只拷贝引用深拷贝: 多层拷贝.复杂数据类型,会重新分配内存空间. 实现浅拷贝的2种方法 使用for ... in 实现 var obj {name: marron,age: 18,msg: {sex: "1" } } var o {}; for(let …

Qt与FFmpeg联合开发指南(二)——解码(2):封装和界面设计

与解码相关的主要代码在上一篇博客中已经做了介绍&#xff0c;本篇我们会先讨论一下如何控制解码速度再提供一个我个人的封装思路。最后回归到界面设计环节重点看一下如何保证播放器界面在缩放和拖动的过程中保证视频画面的宽高比例。 一、解码速度 播放器播放媒体文件的时候播…

Bzoj1051 受欢迎的牛

每一头牛的愿望就是变成一头最受欢迎的牛。现在有 N 头牛&#xff0c;给你 M 对整数 (A,B)&#xff0c;表示牛 A 认为牛 B 受欢迎。这种关系是具有传递性的&#xff0c;如果 A 认为 B 受欢迎&#xff0c;B 认为 C 受欢迎&#xff0c;那么牛 A 也认为牛 C 受欢迎。你的任务是求出…

node --- 模块加载机制

1. Node.js中模块加载机制 1.1 模块查找规则-当模块拥有路径但没有后缀时 require(./find.js); require(./find);require方法根据模块路径查找模块,如果是完整路径,直接进入模块如果模块后缀省略,先找同名JS文件再找同名JS文件夹 require(./find); // 以上会先找到命令行目录…

51Nod 蜥蜴和地下室(搜索)

哈利喜欢玩角色扮演的电脑游戏《蜥蜴和地下室》。此时&#xff0c;他正在扮演一个魔术师。在最后一关&#xff0c;他必须和一排的弓箭手战斗。他唯一能消灭他们的办法是一个火球咒语。如果哈利用他的火球咒语攻击第i个弓箭手&#xff08;他们从左到右标记&#xff09;&#xff…

多线程——实现Runnable接口实现一个多线程

实现Runnable接口实现一个多线程 Runnable接口源码&#xff1a; package java.lang; //Runnable接口源码只有一个run方法 public interface Runnable {public abstract void run(); } 实现Runnable的两个多线程类&#xff1a; public class RunnableThread1 implements Runnabl…

javascript --- 文件上传即时预览 闭包实现多图片即时预览

使用javascript原生功能实现,点击上传文件,然后再网页上显示出来 1. 初级显示 1.1 准备一个input标签和一个img标签 <input typefile id"file"> <img id"preview" src"">1.2 js代码如下 // 将上传的图片显示到页面上function sho…