在第i个点只能选A[i]次的情况下,能选出多少条1-n的最短路

Solution

我们造出最短路DAG,然后对每个点拆点限流,跑最大流即可

双向边警告!(有悖直觉

#include <bits/stdc++.h>
using namespace std;
#define int long long
namespace sp {
// Interfaces: n, g[][], spt[], d[]
const int N = 200005;
int n;
struct edge {int u,v,w;};
vector<pair<int, int> >g[N];
vector<edge> spt;
int d[N], v[N];
void make(int t1, int t2, int t3) {
g[t1].push_back(make_pair(t2, t3));
}
void reset_graph() {
for (int i = 0; i <= n; i++)
g[i].clear();
}
void reset_solver() {
memset(d, 0x3f, sizeof d);
memset(v, 0x00, sizeof v);
}
void solve(int v0) {
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
reset_solver();
d[v0] = 0;
q.push(make_pair(0,v0));
while (q.size()) {
pair<int, int> p = q.top();
int dis = p.first;
int pos = p.second;
q.pop();
v[pos] = 1;
for (int i = 0; i < g[pos].size(); i++) {
int x = g[pos][i].first;
int y = g[pos][i].second;
if (d[x] > d[pos] + y) {
d[x] = d[pos] + y;
if (!v[x]) q.push(make_pair(d[x], x));
}
}
}
for(int i=1;i<=n;i++) {
int p=i;
for(int j=0;j<g[p].size();j++) {
int q=g[p][j].first, w=g[p][j].second;
if(d[q]==d[p]+w) spt.push_back((edge){p,q,w});
}
}
}
} namespace flow { const int maxn = 200005;
const int inf = 1e+14; int dis[maxn], ans, cnt = 1, s, t, pre[maxn * 10], nxt[maxn * 10], h[maxn], v[maxn * 10];
std::queue<int> q;
void make(int x, int y, int z) {
pre[++cnt] = y, nxt[cnt] = h[x], h[x] = cnt, v[cnt] = z;
pre[++cnt] = x, nxt[cnt] = h[y], h[y] = cnt;
}
bool bfs() {
memset(dis, 0, sizeof dis);
q.push(s), dis[s] = 1;
while (!q.empty()) {
int x = q.front();
q.pop();
for (int i = h[x]; i; i = nxt[i])
if (!dis[pre[i]] && v[i])
dis[pre[i]] = dis[x] + 1, q.push(pre[i]);
}
return dis[t];
}
int dfs(int x, int flow) {
if (x == t || !flow)
return flow;
int f = flow;
for (int i = h[x]; i; i = nxt[i])
if (v[i] && dis[pre[i]] > dis[x]) {
int y = dfs(pre[i], min(v[i], f));
f -= y, v[i] -= y, v[i ^ 1] += y;
if (!f)
return flow;
}
if (f == flow)
dis[x] = -1;
return flow - f;
}
int solve(int _s,int _t) {
s=_s;
t=_t;
ans = 0;
for (; bfs(); ans += dfs(s, inf));
return ans;
}
} const int N = 5005;
int n,m,t1,t2,t3,lim[N]; signed main() {
scanf("%lld%lld",&n,&m);
sp::n=n;
for(int i=1;i<=m;i++) {
scanf("%lld%lld%lld",&t1,&t2,&t3);
sp::make(t1,t2,t3);
sp::make(t2,t1,t3);
}
sp::solve(1);
//for(int i=1;i<=n;i++) cout<<sp::d[i]<<" ";
//cout<<endl;
for(int i=0;i<sp::spt.size();i++) {
int u=sp::spt[i].u, v=sp::spt[i].v, w=sp::spt[i].w;
flow::make(2*u,2*v-1,1e+14);
}
for(int i=1;i<=n;i++) {
scanf("%lld",&lim[i]);
flow::make(2*i-1,2*i,lim[i]);
}
cout<<flow::solve(2,2*n-1);
}

我的模板丑的不行了,我得去改造模板了

[CQOI2015] 网络吞吐量 - 最大流,最短路的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  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. bzoj3931: [CQOI2015]网络吞吐量(spfa+网络流)

    3931: [CQOI2015]网络吞吐量 题目:传送门 题解: 现在有点难受....跳了一个多钟...菜啊... 题意都把做法一起给了....最短路+网路流啊. 不想说话...记得开long lon ...

随机推荐

  1. Vue.js 起步

    通过实例来看下 Vue 构造器中需要哪些内容 测试时这段代码我直接写在index.html中 <!DOCTYPE html> <html> <head> <m ...

  2. 简单了解css3样式表写法和优先级

    css3和css有什么区别?首先css3是css(层叠样式表)技术的升级版本,而css是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言. ...

  3. 你为什么不来了解一下Python?

    一.什么是Python Python [1](英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum发明. ...

  4. 重构与动态为angularjs栏位赋值或获取值

    先来看下面一段html: 这个ng-model名称带有一定的规律带有序号. 先来实现数据绑定,从数据取到数据后,为ng-model绑定相对应的值: var c = response.data $sco ...

  5. JSP开发机票预定系统 源码

    开发环境: Windows操作系统开发工具:MyEclipse+Jdk+Tomcat6+Mysql数据库 运行效果图 源码及原文链接:https://javadao.xyz/forum.php?mod ...

  6. Session注销后,浏览器后退仍显示Session信息

    初学JavaWeb,在一次测试登录功能的时候,发现了登进去后,点击退出按钮注销session,浏览器按后退能够显示session信息,并且点击登录还能够不输入密码登录(前端页面没写JS限制输入后登录) ...

  7. 00-django | 01-构建博客目录

    00-django | 01-构建博客目录 python Django 创建blog 进入到 manage.py 文件所在的目录(即项目根目录)下,运行 pipenv run python manag ...

  8. <packaging>pom</packaging>是什么意思

    <packaging>pom</packaging>是什么意思? 答: 以下配置<packaging>pom</packaging>的意思是使用mave ...

  9. 爬虫数据存储——安装docker和ElasticSearch(基于Centos7)

    爬虫数据存储--安装docker和ElasticSearch(基于Centos7) 先决条件 操作系统要求 要安装Docker Engine-Community,您需要一个CentOS 7的维护版本. ...

  10. 在阿里云服务器上安装mysql及重置密码

    参考链接:https://www.cnblogs.com/ljysy/p/10324854.html 下载与安装MySQL: 这里采用Yum管理好了各种rpm包的依赖,能够从指定的服务器自动下载RPM ...