当前位置: 首页 > news >正文

洛谷 P1194 买礼物 最小生成树--但有小坑

这个题我们模拟题目一下就会发现是一道最小生成树的题目,

我们通常会想到:ans=最小生成树的长度+单买一件商品a

注意点1:如果 KI,J​=0,那么表示这两样东西之间不会导致优惠。也就是没有边

注意点2:注意 KI,J​ 可能大于 A。这就意味着我们需要 min(ans,a*b)一下

不过还有一个坑点(我忽略了):可能不连通(也就是没有最小生成树),这种情况就用现有的(假)最小生成树+要单买的商品+a


const int N = 500 + 10,T = 20;


LL a,b;

struct Edge
{
	LL a,b,w;
	bool operator< (const Edge& t) const
	{
		return w < t.w;
	}
};


int p[N];
vector<Edge> edges;

LL find(LL x)
{
	if (p[x] != x) p[x] = find(p[x]);
	return p[x];
}

void solve()
{
	cin >> a >> b;
	for (int i = 1;i <= b;i ++)
		for (int j = 1;j <= b;j ++)
		{
			LL w; cin >> w;
			if (i != j && !w) continue;
			edges.push_back({i,j,w});
		}
	
	sort(edges.begin(),edges.end());
	
	for (int i = 1;i <= b;i ++) p[i] = i;
	
	LL ans = 0;
	LL cnt = 0;
	for (auto &[a,b,w] : edges)
	{
		if (find(a) == find(b)) continue;
		ans += w;
		p[find(a)] = find(b);
		cnt ++;
	}
	
	if (cnt == b - 1)//联通
		cout << min(ans + a,a * b) << endl;
	else//不连通
		cout << min(ans + (b - 1 - cnt) * a + a,a * b) << endl;
}	






相关文章:

  • ESP32S3N16R8驱动ST7701S屏幕(vscode+PlatfoemIO)
  • 【清华大学】实用DeepSeek赋能家庭教育 56页PDF文档完整版
  • selenium库
  • 记录一次mysql全文索引不生效
  • C#中的委托是什么?事件是不是一种委托?委托与事件的区别?
  • SpireCV荣获Gitee 最有价值开源项目称号
  • 鸿蒙跨平台框架ArkUI-X
  • Android 屏幕适配 Tips
  • 单片机如何用C语言重写vfprintf
  • npm 执行安装报错
  • Final Cut Pro X for Mac fcpx音视频剪辑编辑
  • 项目设计之用户注册与登录
  • Unity HDR颜色、基础颜色、强度强度、HDR面板Intensity之间的相互转换
  • UDP协议 TCP协议(格式 超时重传 滑动窗口 拥塞控制...)
  • 如何收集 Kubernetes 集群的日志
  • 7V 至 30V 的超宽 VIN 输入范围,转换效率高达 96%的WD5030
  • Java中lombok的@Data注解【布尔类型】字段定义方式
  • 在使用 router-link 进行路由跳转时,A页面跳转到A页面,资源要重新加载吗
  • eBay日本站猫咪用品卖家数量激增60%,新机遇显现
  • Spring 无法解决循环依赖的 5 种场景
  • 网站建设销售/东莞做网站最好的是哪家
  • 专业的网站建设公/新网店怎么免费推广
  • 怎么做谷歌收录的网站吗/河北优化seo
  • 北京网络营销岗位数量/泉州百度seo公司
  • 中山网站搜索引擎优化/企业营销管理
  • 南昌制作网站软件/推销产品怎么推广