P1194 买礼物

Portal.

最小生成树。

一个貌似比较常见的图论建模。对于每个物品可以抽象成一个点,建立超级源点。把每个物品与超级源点连一条边权为 A A A 的边表示直接购买这个物品,在把有优惠关系的一对物品连一条边权为优惠价格 K K K 的边。

这样转化之后,买到所有的物品就等价于使整张图连通。要求最小代价,求最小生成树即可。

注意区分 A A A 和 B B B。

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int maxn=3e5+5;
struct edge{int u,v,w;}e[maxn];
int fa[maxn];

bool cmp(edge a,edge b){return a.w<b.w;}

int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}

int main()
{
	int A,B;cin>>A>>B;
	for(int i=1;i<=B;i++) e[i]=(edge){0,i,A},fa[i]=i;
	int cnt=B;
	for(int i=1;i<=B;i++)
		for(int j=1;j<=B;j++)
		{
			int K;cin>>K;
			if(K) e[++cnt]={i,j,K};
		}
	sort(e+1,e+cnt+1,cmp);
	int tot=0;
	ll ans=0;
	for(int i=1;i<=cnt;i++)
	{
		int fx=find(e[i].u),fy=find(e[i].v);
		if(fx==fy) continue;
		tot++,fa[fx]=fy,ans+=e[i].w;
		if(tot==B) break;
	}
	cout<<ans;
	return 0;
}
相关推荐
闻缺陷则喜何志丹20 小时前
【二分图 图论】P9384 [THUPC 2023 决赛] 着色|普及+
c++·算法·图论·二分图·洛谷
鸽子炖汤1 天前
LRC and VIP
c++·算法·图论
JK0x073 天前
代码随想录算法训练营 Day61 图论ⅩⅠ Floyd A※ 最短路径算法
算法·图论
qq_447429413 天前
数据结构与算法:图论——拓扑排序
linux·c语言·学习·图论
zc.ovo3 天前
图论刷题1
算法·深度优先·图论
珂朵莉MM3 天前
2022 RoboCom 世界机器人开发者大赛-本科组(省赛)解题报告 | 珂学家
人工智能·算法·职场和发展·深度优先·图论
蒙奇D索大3 天前
【数据结构】图论核心算法解析:深度优先搜索(DFS)的纵深遍历与生成树实战指南
数据结构·算法·深度优先·图论·图搜索算法
ShiinaMashirol3 天前
代码随想录打卡|Day50 图论(拓扑排序精讲 、dijkstra(朴素版)精讲 )
java·图论
JK0x076 天前
代码随想录算法训练营 Day60 图论Ⅹ Bellmen_ford 系列算法
android·算法·图论
ShiinaMashirol6 天前
代码随想录打卡|Day53 图论(Floyd 算法精讲 、A * 算法精讲 (A star算法)、最短路算法总结篇、图论总结 )
算法·图论