HDUOJ3549 - Flow Problem(网络流+最大流最小割+模板)

UVA140 - Bandwidth (暴力dfs+排列+剪枝) 题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=76题目大意有一个图,有n个节点 (n < 8) ,讲这些节点排成一列。定义节点i的带宽为与相邻节点在排列中的最远距离,所有节点的带宽最大值为图的带宽。求将这些节点排列后,带宽最小的一种排列方式。解题 阅读详情

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=3549


题目大意:

有向图求最大流


解题过程:

关于为什么增加流量时要增加一个反向负流量的边纠结了很久,最后还是想通了,其他就没难点了。


题目分析:

增广路算法,每一次尽可能的添加一条增广路,直到不能添加增广路为止,不过有个特殊的地方,按照挑战书上的说法是,可以把之前的流推回去。按照我的理解大概是现在的这个新加的增广路用之前流量的路径,然后把之前流的路径推回去,然后之前的流量寻找一个新的路径。


AC代码:

#include <bits/stdc++.h>
using namespace std;

const int MAX = 20, INF = 0x3f3f3f3f;

struct Node {
    //to表示要指向的点,cap是剩余流量,rev是指这条边的方向边是to这个点的第几条边
    int to, rev, cap;
    Node(int to, int cap, int rev):to(to), cap(cap), rev(rev) {}
};

vector<Node> edge[MAX];
int vis[MAX];

void add_edge(int u, int v, int w) {
    //添加边和反向边
    edge[u].push_back(Node(v, w, edge[v].size()));
    edge[v].push_back(Node(u, 0, edge[u].size()-1));
}

int dfs(int u, int end, int f) {
    if (u == end)
        return f;
    vis[u] = 1;
    for (int i = 0; i < edge[u].size(); i++) {
        Node& e = edge[u][i];
        if (!vis[e.to] && e.cap > 0) {
            int d = dfs(e.to, end, min(f, e.cap));
            //如果找到了增广路就返回
            if (d > 0) {
                //正向边容量减少的时候,反向边要增加容量
                e.cap -= d;
                edge[e.to][e.rev].cap += d;
                return  d;
            }
        }
    }
    return 0;
}

int max_flow(int s, int t) {
    int flow = 0;
    for (;;) {
        memset(vis, 0, sizeof(vis));
        int f = dfs(s, t, INF);
        //如果找不到增广路了,那么当前就是最大流了,返回
        if (f == 0)
            return flow;
        flow += f;
    }
}

int main() {
    int T;
    scanf("%d", &T);
    for (int cases = 1; cases <= T; cases++) {
        int n, m;
        scanf("%d %d", &n, &m);

        for (int i = 0; i <= n; i++)
            edge[i].clear();

        for (int i = 0; i < m; i++) {
            int u, v, w;
            scanf("%d %d %d", &u, &v, &w);
            add_edge(u, v, w);
        }

        printf("Case %d: %d\n", cases, max_flow(1, n));
    }
}
ZYNQ开发(2)在Linux系统层上PL-PS通过AXI-DMA传输数据详细步骤及注意事项 参考的网络资料 https://github.com/bperez77/xilinx_axidma/tree/master https://gitlab.gnome.org/HosseinBeheshti/UlteraZed7EV/-/tree/master/petalinux/xilinx_axidma https://www.icode9.com/content-3-925319.html https://blog.youkuaiyun.com/weixin_38218267/article/details/1 阅读详情

相关推荐

PCB工程师必看:别再搞错1078玻纤布的Dk了,手把手教你算等效介电常数

本文为PCB工程师提供了1078玻纤布等效介电常数(Dk)的详细计算指南,帮助解决高速设计中的信号完整性问题。通过解析玻纤布结构、混合介质理论和实战计算方法,指导工程师准确设置EDA工具参数,避免常见的Dk计算误区,提升设计精度和仿真准确性。

weixin_42546392的博客 399

poj 2455 网络流最大值最小值

问题:点1 到点N之间  找出T条不重用trail 的path,并且求出这些path中,最长的trail长度的最小值. 思路:题目中提示,两个点之间存在多条trail ,将每条trail 存储.并记录有所trail中的最大值,作为上界. 二分查找,构图,将trail长度 struct trail{ int a,b,c; }; trail tr[40001]; int trailn

u012574371的专栏 490

分布式定时任务(XXL-JOB)整合达梦数据库 带源码

背景 1. 因公司需要可视化管理配置调度任务,查询项目选择XXL-JOB,它是开源项目,入手很简单,详情可以参考官方文档; 2. 因项目的机密性,选择数据库为国内知名的达梦数据库7,与Java项目的整合详情可以参考SpringBoot 集成 达梦数据库 maven依赖本地jar包; 3. 因XXL-JOB暂时没有找到集成达梦数据库的案例,博主自己整合DM7踩过很多的坑,特此整合一个简单可直接...

艾斯-李的博客 3814

hdoj 3549 Flow Problem 【最大流】

题目:hdoj 3549 Flow Problem 题意:给出一个图,让你求最大流。 分析:这个题目用dinci写的,因为点比较少,而dinci复杂度O(m*n^2),但是还是跑了160ms,不知道15的神牛怎么写的。 dinci的写法要注意的地方就是存图的时候要考虑怎么存,因为要更新网络残量,即反向的流量,所以这里要注意一下。 思想就不讲了,很多地方有讲。 代码: #

大神养成中..... 1276

CSP历年真题201503-1-图像旋转(C/C++)

一、问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。 输入格式 二、输入格式 输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。 接下来n行每行包含m个整数,表示输入的图像。 三、输出格式 输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。 四、...

GTboy100的博客 1670

28-手把手教你手写CPU-Verilog - 乘法器设计:Booth算法与Wallace树乘法器

文章摘要: 本文详细介绍了两种高效乘法器设计方法:Booth算法和Wallace树乘法器。Booth算法通过检测乘数连续1/0减少部分积,适合有符号数运算;Wallace树采用树形结构压缩部分积,显著降低延迟。文章包含算法原理、具体示例、Verilog实现代码(4位乘法器)及性能对比表,指出Booth适用于通用处理器,Wallace树更适合高性能DSP/GPU。最后强调实际设计中需根据速度、面积和功耗需求选择合适方案。

2301_79143213的博客 206

【网络流之最大流算法模板】HDUOJ 3549 Flow Problem

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 1、Ford-Fulkerson算法:参见博客详解http://blog.youkuaiyun.com/smartxxyx/article/details/9293665/ #include #include #include #include #include #define INF 0x3f3f3f

Jane_JXR的博客 503

如何在非序列模式下使用类似图像模功能

如何在非序列模式下使用类似图像模功能

weixin_72050316的博客 552

POJ1815 Friendship(求最小割点 dinic)

传送门:http://poj.org/problem?id=1815 题意就是求s点到t点,最少去掉几个点使得他们不连通。如果无解输出NO ANSWER!        因为最小割只能求割掉几条边的解,我们要求的是割掉几个点。那么我们可以这样考虑:把每个点拆成入点和出点。入点->出点权值为1。那么割掉这条边就相当于割掉这个点了,就能把这题转化成最小割。那么原来的边,我们是不希望去割它的,所以我们

xtttgo的博客 1652

麒麟操作系统安装教程(保姆级)

本文介绍了如何在VM中安装麒麟操作系统,文章详细的介绍了麒麟操作系统按钻过步骤。

啊渊的专栏 1万+

信息安全管理与评估赛题解析-单机取证(含环境)

链接:https://pan.baidu.com/s/1OMzIq884dW2vAiUp0k2Ppg。链接:https://pan.baidu.com/s/1i5daMqhD53wYeQ6hYzRK6Q。链接:https://pan.baidu.com/s/1QFAjdQZK4sJ-gGRP42XPKA。链接:https://pan.baidu.com/s/1BSXvqN2ZGCQXewgFULoeyQ。链接:https://pan.baidu.com/s/1g9zu5ngBz_KMjW1eBMkJAw。

Brucye 1834

hdu 3549 Flow Problem(增广路算法)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549 模板题,白书上的代码。。。 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include &l...

weixin_30412013的博客 80

03 Token、Embedding、上下文窗口:开发者必须懂的三个基本概念

Token、Embedding 和上下文窗口是大模型应用开发的三个基础概念。本文从成本、速度、检索和上下文设计四个角度讲清它们的工程意义,帮助开发者理解为什么同一段内容会超限、变贵,为什么 RAG 能做语义检索。

老于的笔记的专栏 407

一系列网络流题目-2016.10.17

HDU1116:Play on Words 以前做过的一道题 #include<stdio.h> #include<string.h> #include<queue> #include<iostream> using namespace std; int dr[26],dc[26],N,f[26]; bool e[26],g[...

weixin_30657541的博客 162

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

hdu 3549 最大流入门题

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 【科普】什么是BestCoder?如何参加? Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tota

T_T 909

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【网络流】 HDOJ 4307 Matrix

首先要知道模型。。。。 http://blog.youkuaiyun.com/weiguang_123/article/details/8077385 #include #include #include #include #include #include #include #include #include #include #include #include #include

yysys 529

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

hdu 3549 Flow Problem(最大流模板题)

hdu 3549 Flow Problem(最大流模板题)

2890

hdu 2435(最小割 --dinic模板-- 最大流)

给定一个有向网络,边权为拆掉边的代价,现在1要到n去,n试图阻止1到达,它至少花多大代价。 条件是1可以在任意两点(不含1和n)加入一条边(此边不可被拆除),求n要花费的最小代价最大值。 如果没条件,那么就是求最小割。其实最小割就是求最大流。 可以枚举符合条件的所有的边,但是消耗太大了~这是题目要卡的地方。 所以用求最小割的时候,把源集记录下来,剩下的就是汇集了,这

Weiguang_123的专栏 1453

自动走迷宫(DFS)

功能: 输入一张地图,找出一条可到达终点的路径,1代表不可走,0代表可走,2代表终点。 效果图:实现原理: DFS遍历。 二维数组储存地图。 - 源代码:因为输入数据太麻烦,附了组数据。#include<stdio.h> typedef struct { int x; int y; int s; int f; }note;int map[999][999], bo

ACM_Fish的博客 1256

数独问题(工具)

功能: 输入一个数独(用二维数组表示),求出数独的解。 效果图:实现原理: DFS搜索遍历。 二维数组储存数据。 源代码:#include<iostream> #include<cstring> #include<cstring> #include<cstdio> using namespace std;int data[112][112];void put() { cout << "---

ACM_Fish的博客 796

818 - Cutting Chains (枚举子集 + 状态压缩)

题目链接https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=759题目大意给定n个环,其中有些环可以扣在一起,一个环可以和多个环扣在一起。 现在需要求最少打开多少个环才能使这些环构成一条链。(当然打开了环还需要扣上,打开扣上算一次操作)解题过程既然是暴力里面的

ACM_Fish的博客 782

UVA - 11212 Editing a Book(迭代加深搜索 IDA* + 模板)

题目链接https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2153题目大意给定一个长度 1 ~ 9 的整数序列,每个整数 1 ~ 9 。序列是无序的,你有两种操作,剪切和粘贴,两种操作均可以处理任意长度。求至少经过多少次操作,可以使序列有序(递增)。解题过程本

ACM_Fish的博客 582

UVa 1354 - Mobile Computing(二叉树 + DFS)

题目链接https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4100题目大意给定多个二叉树的叶子,每个节点有一个重量,两个节点可以用一个木棍连接,一个木棍的一头可以连接一个叶子节点,或者另一根木棍。要保证每个木棍平衡,符合胡克定律。解题过程刚开始写的,状态是用一

ACM_Fish的博客 578

UVA122 Trees on the level(二叉树建立与遍历)

题目链接:Trees on the level题目大意:按题目要求建立二叉树,层次遍历即可。 输入格式为: (11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) () (3,L) (4,R) () 空括号表示结束一颗树的输入,前面的表示值,后面表示节点,由根节点到这个节点的路径表示。解题过程: 毕竟第一次写二

ACM_Fish的博客 538

690 - Pipeline Scheduling (DFS + 状态压缩 + 剪枝)

题目链接https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=631题目大意有 5 个不同的工作单元,10 个相同的程序,每个程序需要运行 n 个时间段,每个时间段需要一个工作单元工作。现在问至少需要多少时间,才可以执行完全部的程序。解题过程大体思路就是暴力模拟,

ACM_Fish的博客 533

12558 - Egyptian Fractions (HARD version) (IDA* + 剪枝)

题目链接https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4003题目大意埃及分数问题,给定一个分数,用几个不相同的分数表示,有多个表示的话,用的分数越少越好,还是多解的话,最小的分数越大越好,然后第二小的分数越大越好……一直到最大的分数越大越好。解题过程见紫

ACM_Fish的博客 453
上一篇: POJ2411 - Mondriaan's Dream (状压DP+轮廓线DP)
下一篇: HDU5550 - Game room (DP)
ACM_Fish
博客等级 码龄10年 69粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值