bzoj 1497 NOI2006最大获利

我对题意的理解:给出一堆公司和一堆用户,我们买公司需要花钱,每个用户会支付报酬当且仅当他所钟爱的两个公司我都买了,问最大获利

最大权闭合子图= =好厉害的样子 首先我们连边最小割ans 答案就是sum-ans 这个可以想,sum表示在不需要支出的情况下的获利,现在我们需要支出,所以要跑一遍最小割。感觉就是 我们挣的钱可以通过一个途径跑掉,就挣不到,但是一个途径跑掉的钱是有限的。(怎么会有我这么愚蠢的理解呢) 建立源S,汇T 然后由S向所有用户连长度为报酬的边,用户向喜欢的公司连inf(表示一些疯狂的女人为了买衣服会花好多好多钱),然后公司向汇点连长度为价格的边。看着好奇怪啊,但是我想明白啦!

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
# define inf 1e9
using namespace std;
const int maxn=600000;
struct node{int to,next,len;}table[maxn<<2];
int tot=1,head[maxn];
void add(int a,int b,int c)
{
	table[++tot]=(node){b,head[a],c};
	head[a]=tot;
	table[++tot]=(node){a,head[b],0};
	head[b]=tot;
}
int n,m,S,T,a[maxn],ans,sum;
int q[maxn],h,t,d[maxn];
bool bfs()
{
	h=t=0;
	memset(d,0,sizeof d);
	q[++t]=S; d[S]=1;
	while(h!=t)
	{
		int x=q[++h];
		for(int i=head[x];i;i=table[i].next)
		if(!d[table[i].to]&&table[i].len)
		{
	 		d[table[i].to]=d[x]+1;
	 		q[++t]=table[i].to;
		}
	}
	return !!d[T];
}
int dfs(int x,int f)
{
	if(x==T||!f) return f;
	int cnt=0;
	for(int i=head[x];i;i=table[i].next)
	if(d[table[i].to]==d[x]+1)
	{
		int hh=dfs(table[i].to,min(f,table[i].len));
		table[i].len-=hh;
		table[i^1].len+=hh;
		cnt+=hh;
		f-=hh;
		if(!f) break;
	}
	return cnt;
}
int main()
{
	scanf("%d%d",&n,&m);
	S=n+m+1,T=n+m+2;
	for(int i=1;i<=n;i++) 
	{
		scanf("%d",&a[i]);
		add(m+i,T,a[i]);
	}
	int a,b,c;
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&a,&b,&c); sum+=c;
		add(S,i,c);
		add(i,m+a,inf);
		add(i,m+b,inf);
	}
	while(bfs()) ans+=dfs(S,inf);
	cout<<sum-ans;
	return 0;
}


内容概要:本文详细介绍了基于FPGA的144输出通道可切换电压源系统的设计与实现,涵盖系统总体架构、FPGA硬件设计、上位机软件设计以及系统集成方案。系统由上位机控制软件(PC端)、FPGA控制核心和高压输出模块(144通道)三部分组成。FPGA硬件设计部分详细描述了Verilog代码实现,包括PWM生成模块、UART通信模块和温度监控模块。硬件设计说明中提及了FPGA选型、PWM生成方式、通信接口、高压输出模块和保护电路的设计要点。上位机软件采用Python编写,实现了设备连接、命令发送、序列控制等功能,并提供了一个图形用户界面(GUI)用于方便的操作和配置。 适合人群:具备一定硬件设计和编程基础的电子工程师、FPGA开发者及科研人员。 使用场景及目标:①适用于需要精确控制多通道电压输出的实验环境或工业应用场景;②帮助用户理解和掌握FPGA在复杂控制系统中的应用,包括PWM控制、UART通信及多通道信号处理;③为研究人员提供一个可扩展的平台,用于测试和验证不同的电压源控制算法和策略。 阅读建议:由于涉及硬件和软件两方面的内容,建议读者先熟悉FPGA基础知识和Verilog语言,同时具备一定的Python编程经验。在阅读过程中,应结合硬件电路图和代码注释,逐步理解系统的各个组成部分及其相互关系。此外,实际动手搭建和调试该系统将有助于加深对整个设计的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值