技术经验分享:hdu3549初试最大流问题

简介: 技术经验分享:hdu3549初试最大流问题

"

Flow Problem

Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)

Total Submission(s): 13315 Accepted Submission(s): 6372

Problem Description

Network flow is a well-known difficult problem for ACMers. Given a graph, your task is to //代码效果参考:https://v.youku.com/v_show/id_XNjQwNjg1MjE3Ng==.html

find out the maximum flow for the weighted directed graph.

Input

The first line of input contains an integer T, denoting the number of test cases.

For each test case, the first line contains two integers N and M, denoting the number of vertexes and edges in the graph. (2 <= N <= 15, 0 <= M <= 1000)

Next M lines, each line contains three integers X, Y and C, there is an edge from X to Y and the capacity of it is C. (1 <= X, Y <= N, 1 <= C <= 1000)

Output

For each test cases, you should output the maximum flow from source 1 to sink N.

Sample Input

2

3 2

1 2 1

2 3 1

3 3

1 2 1

2 3 1

1 3 1

#include

#include

#include

#include

#define maxn 16

#define inf 1[29

using namespace std;

struct edge

{

int to,cap,rev;

};

int n,m,vis【maxn】;

vector fuck【maxn】;

void add_edge(int from,int to,int cap)//构图过程

{

fuck【from】.push_back((edge){to,cap,fuck【to】.size()});//fuck【to】.size() 表示反边在反向邻接表的位置--即fuck【to】中的位置

fuck【to】.push_back((edge){from,0,fuck【from】.size()-1});//同上

}

void init()

{

for(int i=1;i<=n;i++) fuck【maxn】.clear();

}

int dfs(int s,int e,int f)

{

if(s==e) return f;

vis【s】=1;

for(int i=0;i0)

{

int d=dfs(temp.to,e,min(f,temp.cap));

if(d>0)

{

temp.cap-=d;

fuck【temp.to】【temp.rev】.cap+=d;// 回溯处理容量问题 以及对反向边的处理

//一直回溯到流量最小的那个点上去 然后去走其他路

return d;//回溯过程肯定是要更新的

}

}

}

return 0;

}

int max_flow(int s,int e)

{

int flow=0;

while(1)//不断的从s走到e这个点 当所有可能的通道cap为0的时候 贪心完成(因为每次过程都会cap进行一次更新)

{

memset(vis,0,sizeof(vis));

int temp=dfs(s,e,inf);

if(temp==0) return flow;

else flow+=temp;

}

}

int //代码效果参考:https://v.youku.com/v_show/id_XNjQwMDM5NzIyOA==.html

main()

{

cin.sync_with_stdio(false);

int t,Case=0;

cin]t;

while(t--)

{

cin]n]m;

init();

while(m--)

{

int a,b,c;

cin]a]b]c;

add_edge(a,b,c);//构图

}

cout[""Case ""[++Case["": ""[max_flow(1,n)[endl;

}

return 0;

}


"
image.png
相关文章
|
机器学习/深度学习 算法
基于LSTM的负荷和可再生能源出力预测(核心部分复现)
基于LSTM的负荷和可再生能源出力预测(核心部分复现)
|
JavaScript 前端开发 开发者
Vue.js的未来已来:掌握最新功能,驾驭前端开发的新浪潮!
【8月更文挑战第30天】Vue.js作为前端开发领域的明星框架,凭借其轻量级、响应式及组件化特性,深受全球开发者喜爱。它持续进化,引入新功能并优化性能,如提升渲染速度和减小打包体积,增强TypeScript支持,简化组件编写流程,进一步提升应用响应性和加载速度,改善开发者体验。活跃的社区和丰富的开源项目如“vuejs-challenges”推动其不断发展。未来,Vue.js将探索更多新特性,如宏和非虚拟DOM模式,巩固其在现代前端框架中的领先地位。
154 0
|
存储 数据建模 Serverless
计算机技术概论
4.2 Excel的基本操作 4.2.1工作簿的新建和打开 1、工作簿与工作表 工作簿是指在excel中用来存储并处理数据的文件,其扩展名是.xlsx。 各工作簿是由工作表组成的,每个工作簿都可以包含一个或多个工作表,用户可以用其中的工作表来组织种相关数据。工作表不能单独存盘,只有工作簿才能以文件的形式存盘;因此执行保存命令式对工作簿执行的,会将其中所有工作表一起保存。 1)工作簿(Sheet)是一个由行和列交叉排列的二维表格,也称作电子表格,用于组织和分析数据。 2)Excel的一个工作簿默认有3个工作表,用户可以根据需要添加工作表,一个工作簿最多可以包括无数个工作表 3)但新建时
|
存储 安全 网络协议
【大学计算机技术】第七章 测试 3
【大学计算机技术】第七章 测试
91 0
|
1天前
|
人工智能 运维 安全
|
3天前
|
SpringCloudAlibaba 负载均衡 Dubbo
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
本文对比分析了SpringCloudAlibaba框架下Feign与Dubbo的服务调用性能及差异。Feign基于HTTP协议,使用简单,适合轻量级微服务架构;Dubbo采用RPC通信,性能更优,支持丰富的服务治理功能。通过实际测试,Dubbo在调用性能、负载均衡和服务发现方面表现更出色。两者各有适用场景,可根据项目需求灵活选择。
371 123
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
|
6天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
581 107
|
2天前
|
Java 数据库 数据安全/隐私保护
Spring 微服务和多租户:处理多个客户端
本文介绍了如何在 Spring Boot 微服务架构中实现多租户。多租户允许单个应用实例为多个客户提供独立服务,尤其适用于 SaaS 应用。文章探讨了多租户的类型、优势与挑战,并详细说明了如何通过 Spring Boot 的灵活配置实现租户隔离、动态租户管理及数据源路由,同时确保数据安全与系统可扩展性。结合微服务的优势,开发者可以构建高效、可维护的多租户系统。
193 127

热门文章

最新文章