SGU 194/LOJ 115(无源汇可行流模板)

无源汇有上下界可行流详解(loj115) 例题链接 先解释一下流量平衡。 每条边有出发点和结束点。 出发点就有流出的流量,结束点就有流入的流量。 流量平衡是所有节点流入流量等于流出流量。这种问题的思想就是: 在一个初始流的基础上加上一个附加流。 每条边的流量有上下界。那么初始每条边的流量就为每条边的下界。 用d数组表示每个点的流入量-流出量。那么: 附加流的流出量-流入量就应该等于初始流的流入量-流出量。 这样的话两个流的 阅读详情

题意:

给n个点,及m根pipe,每根pipe用来流躺液体的,单向的,每时每刻每根pipe流进来的物质要等于流出去的物质,要使得m条pipe组成一个循环体,里面流躺物质。

并且满足每根pipe一定的流量限制,范围为[Li,Ri].即要满足每时刻流进来的不能超过Ri(最大流问题),同时最小不能低于Li。

例如:

46(4个点,6个pipe)
12 1 3 (1->2上界为3,下界为1)
23 1 3
3 4 1 3
4 1 1 3
1 3 1 3
4 2 1 3

这里写图片描述

(LOJ 115更加直白,要求是一样的)

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<cstring>
using namespace std;
struct edge{
    int to,cap,rev,id;
};
vector<edge>G[210];
int level[205],iter[205],cha[205],lower[200005],cur[205];
void addedge(int from,int to,int cap)
{
    G[from].push_back(edge{to,cap,(int)G[to].size()});
    G[to].push_back(edge{from,0,(int)G[from].size()-1});//反向容量为0!!
}
void bfs(int s)
{
    memset(level,-1,sizeof(level));
    queue<int>que;
    level[s]=0;que.push(s);
    while(!que.empty()){
        int t=que.front();que.pop();
        for(int i=0;i<G[t].size();i++){
            edge e=G[t][i];
            if(e.cap>0&&level[e.to]<0){
                level[e.to]=level[t]+1;
                que.push(e.to);
            }
        }
    }
}
int dfs(int v,int t,int f)
{
    if(v==t)return f;
    for(int&i=iter[v];i<G[v].size();i++){//注意传引用!
        edge&e=G[v][i];
        if(e.cap>0&&level[v]<level[e.to]){
            int d=dfs(e.to,t,min(f,e.cap));
            if(d>0){
                e.cap-=d;
                G[e.to][e.rev].cap+=d;
                return d;
            }
        }
    }
    return 0;//不要漏了这个,很多时候可能是无法增广的
}
int maxflow(int s,int t){
    int flow=0;
    for(;;){
        bfs(s);
        if(level[t]<0)return flow;
        memset(iter,0,sizeof(iter));
        int f;
        while(f=dfs(s,t,0x7f7f7f7f))
            flow+=f;
    }
}
struct ans{
    int id,cap;
    bool operator<(const ans v)const{
        return id<v.id;
    }
};
int main() {
    int n, m, i, j, k;
    cin >> n >> m;
    for (i = 1; i <= m; i++) {
        int a, b, d;
        scanf("%d%d%d%d", &a, &b, &lower[i], &d);//每条边的下界
        cur[b] += lower[i];//统计每个点的下界情况
        cur[a] -= lower[i];
        addedge(a, b, d - lower[i]);
        G[a].back().id = i;//记录边的id
    }
    int sum = 0;
    for (i = 1; i <= n; i++) {
        if (cur[i] > 0) {
            addedge(0, i, cur[i]);
            sum += cur[i];
        } else if (cur[i] < 0) {
            addedge(i, 201, -cur[i]);
        }
    }
    int flow = maxflow(0, 201);
    if (flow != sum) {
        cout << "NO" << endl;
        return 0;
    }
    cout << "YES" << endl;
    vector<ans> as;//存答案
    for (i = 1; i <= n; i++) {
        for (j = 0; j < G[i].size(); j++) {
            edge e = G[i][j];
            if (!e.id)continue;//注意反向边以及连向汇点源点的边是没有ID的,也就是ID是0;
            as.push_back(ans{e.id, G[e.to][e.rev].cap + lower[e.id]});//这条边的反向边的容量+这条边的下界
        }
    }
    sort(as.begin(), as.end());
    for (i = 0; i < as.size(); i++) {
        printf("%d\n", as[i].cap);
    }

    return 0;
}
抖音用户主页视频数据爬虫详解(点赞,收藏,分享等) 的包中有个max_cursor参数,请求载荷中也有一个这样的参数,每次请求的数据中max_cursor是下一个请求的载荷,,,同时has_more为1时候代表还能请求,0为不能请求,我们做如下判断。最后发现cookie很容易过期,批量爬取有点困难,,,,我们采用drissoinpage进行自动化获取。首先进行抓包分析,,,随便找个主页,f12,关键词搜索,发现这个包是以post开头。请你第一次运行先按0,进行登录(或者触发反爬的时候),登录完成之后,按1进行爬取,完整代码请在知识星球。 阅读详情

相关推荐

保姆级教程:手把手教你为裕泰微YT8521 PHY芯片编写Linux设备树(DTS)节点与驱动

本文提供了一份详细的保姆级教程,手把手教你为裕泰微YT8521 PHY芯片编写Linux设备树(DTS)节点与驱动。从基础配置到RGMII接口的特殊设置,再到驱动开发的关键步骤和调试技巧,帮助开发者快速掌握PHY芯片的移植与开发。

weixin_33734785的博客 333

loj115(无源汇有上下界可行流)

网络流貌似没学深啊。。然后这应该就是所谓的循环流吧。。解决的方案是,先把边拆成必要边和非必要边即把容量拆成lower和upper-lower这2条边,显然我们要让必要边跑满流,所以可以考虑对每条必要边进行如下处理:添加一个源点S和汇点T,设必要边为x-&gt;y,容量为v,则将这边转化为S-&gt;y容量为v和x-&gt;T容量为v,判断满流即可。。 然后对非必要边,直接从x向y连就可以了,容量...

qkoqhh 330

Linux 音频驱动(六) ALSA音频驱动之PCM Write数据传递过程

目录1. 前言2. PCM Data Flow3. 总结 1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在Linux 音频驱动(一) ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间不能随便互相访问。因此用户如果播放音频,则需要调用copy_from_user()将用户数据从user spa

_Modest_的博客 1万+

SGU 194 Reactor Cooling (无源汇有上下界的最大流)

Description 给出一个\(N\)个点\(M\)条边的循环网络,每条边有一个流量下限和上限,问是否有满足容量限制的最大流,若有,输出每条边上的流量。 Input 第一行给出结点数\(N\)和边数\(M\),接下来\(M\)行,每行给出四个数\(u\),\(v\),\(l\),\(c\),表示\(u\)到\(v\)有一条下限为\(l\)上限为\(c\)的边。\(1 \leqslant N \...

weixin_30530939的博客 199

从5V降到3.3V,你的LDO到底有多烫?手把手算功耗、选散热,避开这些坑

本文详细解析了LDO在5V转3.3V电路中的发热问题,提供了精确的功耗计算公式和散热设计方法。通过对比不同封装的热阻参数和优化PCB布局,帮助工程师有效降低LDO温度,避免热保护触发。文章还探讨了替代方案的技术拐点,为电源系统优化设计提供实用指导。

weixin_30304375的博客 434

【实践】VECTOR AUTOSAR创建SWC读写CAN信号

在AUTOSAR开发中最必要的功能就是读写CAN信号,本文通过一步步说明,介绍如何开发SWC来读写CAN信号,可以说在AUTOSAR中实现读写CAN信号的实践过程,是一个非常基础且典型的练习。在本篇文章阅读之前,推荐阅读AUTOSAR RTE介绍,本篇文章介绍了RTE的比较全面的介绍了AUTOSAR RTE。理解了RTE之后,才能对SWC的设计更加清楚。话不多说,接着上一篇内容VECTOR DaVinci从0到1搭建工程,此篇文章我们介绍如何在DaVinci Developer中开发SWC访问CAN信号。为

酒无忧的博客 1230

最大网络流问题

之前参加阿里巴巴的笔试碰到一最大网络流的题目。因为之前没有看过这类算法,所以还是自然没做出。今天抽空看了看。了解了下基本概念和求解流程。这里简单总结下。 主要内容来自百度文库某ppt。在每幅图片的下面我会给出一些说明性文字。 本图示最大流的一个实例。由此,可以引出最大流的一些基本的定义和概念 可以这样看,图就是一种管道,管道有最大通过流量的限制,图中边的权值就是所谓的“容量”。同时,...

weixin_34001430的博客 576

麒麟V10安装图形化界面

在配置VNC时发现,原本麒麟V10系统最小化安装,导致无图形化界面,先需要对其进行安装。 首先确保无图形化界面,可以在终端输入startX命令查看是否报错。 安装介绍: 1、 安装图形化界面 yum grouplist //查看可用yum安装组 注:这里一般会有缺少包或者出现包不符合的问题 导入软件包分组信息文件xxxx-comps.xml arm: 将此文件传送到源服务器, 然后createrepo -g导入到arm的base目录和updates目录 createrepo -g e33dc

Pro_jhf的博客 8071

可行流

对于无源汇问题,方法有两种. 1 从边的角度来处理. 新建超级源汇, 对于每一条有下界的边,x->y, 建立有向边 超级源->y ,容量为x->y下界,建立有向边 x-> 超级汇,容量为x->y下界.建立有向边 x->y,容量为x->y的上界减下界. 2 从点的角度来处理. 新建超级源汇,对于每个点流进的下界和为 in, 流出此点的下界和为out.如果in > out. 建立有

ACM之梦 2824

2025.06.16【转录组】|Ribo-seq数据流程详解(二 基因组比对)

本文详细介绍了Ribo-seq数据分析中的比对流程,包括环境准备、STAR索引构建、比对参数设置及结果统计可视化。通过samtools和R脚本实现比对质量评估,提供常见问题解决方案和关键指标解读。该流程强调比对参数优化和质量控制,为后续翻译组学分析奠定基础。

1976

STM32入门教程:智能储物柜控制

在这个例子中,我们将使用一个4x4的储物柜,共有16个储物格。我们了解了硬件准备、储物柜电路设计、STM32的基本配置、储物柜控制代码的编写以及测试和调试等方面的知识。根据我们的电路设计,我们需要将一些引脚配置为输出,并将其他引脚配置为输入。在本教程中,我们将使用STM32微控制器来实现一个基本的智能储物柜控制系统。在主函数中,我们将不断循环读取传感器数据,并根据数据的变化来控制储物柜的开关和显示相关信息。这个函数将读取人体感应传感器、温湿度传感器和光照传感器的数据,并将数据存储到相应的变量中。

m0_75244442的博客 658

网络流(一)

网络流(一)介绍 定义: 源点:提供初始流量的点,只出不进。 汇点:所有可用流最后的聚集点,只进不出。 容量:点与点之间可以流的最大值(理论值)。 流量:点与点之间的实际流量,当该边的流量等于容量,说明满流。 最大流:从源点出发,汇点可以接受到的最大流量。 可行流:一组边,其流量都没有超过最大流就说明是可行流。 ![在这里插入图片描述](ht...

qq_40994343的博客 944

冷门但实用:Python爬取微信公众号历史文章,突破微信反爬限制(2025有效)

2025年微信公众号爬取的核心是「冷门方法+指纹伪装」,而非常规接口破解,itchat-uos+Playwright组合是突破设备指纹的关键;登录态持久化、动态Token实时获取、频率严格控制是避免被封禁的三大核心;文章内容解析需解决2025新增的编码混淆问题,chardet+BeautifulSoup是冷门但有效的方案;合规是前提,爬取频率、数据用途需严格遵守平台/法律规则。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 3775

网络流__4 上下界可行流

网络流 __4 上下界可行流 对于容量有上下界规范的网络流问题 无源汇上下界可行流 n个点m条边的有向图,每条边有一个流量下界和流量上界规范,求是否存在一个可行流 设原网络为(G,F),变换后网络为(G',S'),每条边上界Cl(u,v),下界Cu(u,v),流量f(u,v).对于上下界,我们很容易将等式变形: cl(u,v)≤f(u,v)≤cu(u,v)→0≤f(u,v)−cl(u,v)≤cu(u,v)−cl(u,v) c_l(u,v) \le f(u,v) \le c_u(u,v) \to 0 \l

m0_51780913的博客 1069

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

有上下界的网络流 loj115 loj116 loj 117

参考文章 无源汇有上下界的可行流 有源汇有上下界的最大流 有源汇有上下界的最小流 无源汇有上下界可行流 以 loj115 为例。 剥离出必要边与自由边。 #include <iostream> #include <cstring> #include <cstdio> #include <queue> using namespace std;...

dianjiaxian1205的博客 172

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

有上下限的最小费用可行流

例题 BZOJ 3876 题意,有N个点,并且有一些边,每个点必须要经过一次,但是不限经过次数,也就是有下界的情况,且下界为1,现在每次的起点都是1,问至少花费的代价,使得每次从1开始,终点不限的情况下,走完所有的边(这里所谓的支线指的是每条边,点都被称之为剧情点)。 于是,很好发现是在说明一个有下限、无上限的最小费用可行流的这么一个问题了。 最小费用可行流的模型 给定一个网络,一...

既然弱小,就只顾变强就是了 1741

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

最小费用可行流(有上下限网络流的拓展)

Incorrect Flow CodeForces - 708D 题意:有N个点,M条边,每条边给出的是u、v、c、f,指的是u到v有容量为c流量为f的边,现在我们定义源点为1,汇点为N,想知道需要多少次修改的代价可以使得原网络变成可行流。我们可以对容量+1,代价为1,对流量加减1的代价都是1。 解 原网络有这么几项是不满足可行流的: 目前边的容量小于目前边的流量 某个点的入...

既然弱小,就只顾变强就是了 1122

bzoj4260: Codechef REBXOR(01Trie)

题目传送门 。 解法: 01Trie。 听名字大概就知道怎么回事了。 自己yy了下也不知道对不对。。 问题大概就是: 很多个数,求他们异或某一个数的最大值。 我的建法是这样的: 每个数转化成二进制的01序列。 从最高位开始建01trie。跟普通trie差不多。只是一个点只有两个儿子的区别。 这里的最高位不是指数本身的最高位。而是最大数的最高位。 那么此题中范围为int。我把...

Hanks_o的博客 516

LOJ#115 无源汇上下界可行流

题目链接:https://loj.ac/problem/116无源汇上下界可行流模板题。具体讲解见:http://blog.youkuaiyun.com/winter2121/article/details/79430071下面有dinic算法和sap算法。SAP算法中,每条边的流量就是反向边的cap原图中每条边的真实流量 = 自由流+下界流。 自由流就是dinic所得最大流,原图是将下界分离出来的,故+下界...

雪的期许 645

【LOJ115】无源汇有上下界可行流(模板题)

点此看题面 大致题意: 给你每条边的流量上下界,让你判断是否存在可行流。若有,则还需输出一个合法方案。 大致思路 首先,每条边既然有一个流量下界\(lower\),我们就强制它初始流量为\(lower\)。 而考虑到它还有一个流量上界\(upper\),其实这就等同于建一条初始流量为\(0\),而容量为\(upper-lower\)的边。 但考虑到流量平衡,因此我们可以考虑对于每个点用\(v_i\...

weixin_30839881的博客 166

【LOJ115】无源汇有上下界可行流 模板题

Description https://loj.ac/problem/115 Solution 如果uuu向vvv有一条下界为f1f1f_1、上界为f2f2f_2的边,那么从SSS向vvv、uuu向TTT连一条流量为f1f1f_1的边,从vvv向uuu连一条f2−f1f2−f1f_2-f_1的边。当最大流等于∑f1∑f1\sum f_1时,有可行流。 Code 跑得好慢哇...

დ♂Hany01's Blog Space♂ღ 372

[LOJ.AC]115. 无源汇有上下界可行流

115. 无源汇有上下界可行流 内存限制:256 MiB 时间限制:1000 ms 题目描述 这是一道模板题。 n 个点,m 条边,每条边 e 有一个流量下界lower(e)" role="presentation" style="position: relative;">lower(e)lower(e)\text{lower}(e) 和流量上界 upper(e)" role="pre

chutzpah 550

LOJ115 无源汇有上下界可行流(上下界网络流)

  假设初始流为每条边的下界。但这样可能流量会不守恒,我们需要在上面加上一个附加流使流量守恒。只要让每个点开始的出/入流量与原初始流相等就可以求出附加流了。那么新建超源S超汇T,令degree[i]表示流入i的边的下界之和-从i流出的边的下界之和。   若degree[i]>0,则表示需要有额外degree[i]的流量流入i来达到流量平衡,那么从S向i连上界为degree[i]的边。  ...

weixin_30677617的博客 168

loj #115. 无源汇有上下界可行流

题目链接:https://loj.ac/problem/115 参考博客:http://www.cnblogs.com/liu-runda/p/6262832.html 模型:一个网络,求出一个流,使得每条边的流量必须>=Li且 这个算法是有上下界网络流算法的基础,只要深刻理解这个算法其他算法也就水到渠成,因此我用大篇幅力图将这个算法的思想和细节阐述清楚.

bibibibi的博客 447

LOJ #115. 无源汇有上下界可行流

题目链接:https://loj.ac/problem/115解法:#include <bits/stdc++.h> using namespace std; const int mn=22222; const int mm=1000000; const int oo=0x3fffffff; int node, st, sd, edge, Edge; int reach[mm], flow[mm],

I good vegetable a! 550

LOJ模板题 无源汇有上下界可行流

https://loj.ac/problem/115 没有loj我都不知道有这种操作。 如何求得一个无源汇的图是否可行呢,是一个网络流可以解决的问题。 首先,我们知道每条边的起点u,终点v,下界low,上界up。最初始的图理应是由各条边的下界流量组成的。 然后我们看一看每个点是否能做到流入量和流出量平衡。本来就平衡的话就不用管这个点了。如果不平衡,我们分情况讨论 如果对于点p,流入量

llzhh的博客 774
上一篇: POJ2826
下一篇: Codeforces Round #482 (Div. 2)
HumveeA6
博客等级 码龄17年 12粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值