hdu 1532(最大流模板)

本文深入探讨了Dinic算法的原理与应用,这是一种用于解决最大流问题的有效算法。通过详细的代码解析,读者将理解如何使用层次图进行增广路径搜索,以及如何更新残余网络。文章还提供了完整的C++实现代码,帮助读者更好地掌握算法细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://blog.youkuaiyun.com/x_y_q_/article/details/51999466

#include <iostream>
#include <cstring>
#include <cstdio>
#include<queue>
#define fi first
#define se second
#define show(a) cout<<a<<endl;
#define show2(a,b) cout<<a<<" "<<b<<endl;
#define show3(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl;

using namespace std;
int const inf = 0x3f3f3f3f;
int const MAX = 205;
int n, m;
int c[MAX][MAX], dep[MAX];//dep[MAX]代表当前层数

int bfs ( int s, int t ) //重新建图,按层次建图
{
	queue<int> q;
	while ( !q.empty() )
		q.pop();
	memset ( dep, -1, sizeof ( dep ) );
	dep[s] = 0;
	q.push ( s );
	while ( !q.empty() )
	{
		int u = q.front();
		q.pop();
		for ( int v = 1; v <= m; v++ )
		{
			if ( c[u][v] > 0 && dep[v] == -1 ) //如果可以到达且还没有访问,可以到达的条件是剩余容量大于0,没有访问的条件是当前层数还未知
			{
				dep[v] = dep[u] + 1;
				q.push ( v );
			}
		}
	}
	return dep[t] != -1;
}

int dfs ( int u, int mi, int t ) //查找路径上的最小流量
{
	if ( u == t )
		return mi;
	int tmp;
	for ( int v = 1; v <= m; v++ )
	{
		if ( c[u][v] > 0 && dep[v] == dep[u] + 1  && ( tmp = dfs ( v, min ( mi, c[u][v] ), t ) ) )
		{
			c[u][v] -= tmp;
			c[v][u] += tmp;
			return tmp;
		}
	}
	return 0;
}

int dinic()
{
	int ans = 0, tmp;
	while ( bfs ( 1, m ) )
	{
		while ( 1 )
		{
			tmp = dfs ( 1, inf, m );
			if ( tmp == 0 )
				break;
			ans += tmp;
		}
	}
	return ans;
}

int main()
{
	while ( ~scanf ( "%d %d", &n, &m ) )
	{
		memset ( c, 0, sizeof ( c ) );
		int u, v, w;
		while ( n-- )
		{
			scanf ( "%d %d %d", &u, &v, &w );
			c[u][v] += w;
		}
		printf ( "%d\n", dinic() );
	}
	return 0;
}

### 使用PyTorch加载CIFAR-10数据集进行图像分类 为了使用PyTorch加载CIFAR-10数据集并执行图像分类任务,通常会遵循一系列特定的操作流程。这些操作包括但不限于导入必要的库、定义转换函数、设置数据加载器以及准备用于训练和测试的数据。 #### 导入所需模块 首先,需要引入一些基本的Python包来辅助完成整个过程: ```python import torch from torchvision import datasets, transforms from torch.utils.data import DataLoader ``` #### 定义图像预处理变换 接着,创建一组适用于输入图片的转换规则,这有助于提高模型性能或加速收敛速度。对于CIFAR-10而言,常见的做法是对原始RGB像素值做标准化处理,并随机裁剪及水平翻转增强样本多样性: ```python transform_train = transforms.Compose([ transforms.RandomCrop(32, padding=4), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)), ]) transform_test = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)), ]) ``` 这里`transforms.Normalize()`中的参数分别代表均值(mean)与标准差(std),它们来源于CIFAR-10官方给出的经验数值[^1]。 #### 设置数据加载器 之后,利用上述配置好的转换对象实例化对应的`datasets.CIFAR10`类,并通过`DataLoader`构建迭代器以便后续批量获取批次(batch)形式的数据供网络学习之用: ```python trainset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform_train) trainloader = DataLoader(trainset, batch_size=128, shuffle=True, num_workers=2) testset = datasets.CIFAR10(root='./data', train=False, download=True, transform=transform_test) testloader = DataLoader(testset, batch_size=100, shuffle=False, num_workers=2) ``` 以上代码片段展示了如何基于PyTorch框架高效便捷地加载CIFAR-10数据集,并为其指定恰当的前处理方式以适应具体的机器学习应用场景需求[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值