UVa1265/LA4848 Tour Belt

UVa1265/LA4848 Tour Belt

  • 题目链接
  • 题意
  • 分析
  • AC 代码

题目链接

   本题是2010年icpc亚洲区域赛大田赛区的F题

题意

   给出一个有n个结点m条边的加权无向图G(2≤n≤5000,1≤m≤n(n-1)/2),满足如下条件的结点集B(2≤|B|≤n)称为候选子图。B内的结点在G中连通,且B的任何一条内弧的权值严格大于任何一条边界弧的权值。这里的内弧是指两个端点都在B中的弧,边界弧是指恰好有一个端点在B中的弧。你的任务是求出所有候选子图的结点数之和。
   如下图所示,左图有3个候选子图{1,2},{3,4}和{1,2,3,4},结点数之和为8。右图有6个候选子图,分别为{1,2},{3,4},{5,6},{7,8},{3,4,5,6}和{1,2,3,4,5,6,7,8},结点数之和为20。注意{1,2,7,8}不是候选子图,因为这些结点在G中不连通({1,2}和{7,8}之间没有边相连)。
Tour Belt

分析

   首先可以想到如果最大权边唯一,那么其两端点构成的子图是候选子图,否则要看沿两端点延伸的其他边对应的端点是否要包含到候选子图中,找到初始候选子图容易想到将其缩成一点继续迭代,不过这样在本题的数据规模下会超时。

   仔细分析以上缩点迭代的过程,其实就是边权从大到小排序后求最大生成树(也可以是森林)的过程,当前边合并进来后,检查其所在的连通分量是否满足候选子图的要求然后更新答案计数即可。不过这种做法其实复杂度为 O ( m n ) O(mn) O(mn),感觉数据刁钻一点的话也会超时,没想到提交AC了并且才几十毫秒。

AC 代码

#include <iostream>
#include <algorithm>
using namespace std;#define N 5002
struct edge {int u, v, w;bool operator< (const edge &rhs) const {return w > rhs.w;}
} e[N*N>>1];
struct {int v, w;} g[N][N]; int f[N], c[N], cc[N], m, n;int find(int x) {return x == f[x] ? x : f[x] = find(f[x]);
}bool check(int r) {int x = 0, y = 200000;for (int u=1; u<=n; ++u) if (find(u) == r) for (int i=0; i<c[u]; ++i) {int v = g[u][i].v, w = g[u][i].w;find(v) == r ? y = min(y, w) : x = max(x, w);}return y > x;
}int solve () {cin >> n >> m;for (int i=1; i<=n; ++i) f[i] = i, c[i] = 0, cc[i] = 1;for (int i=0, u, v, w; i<m; ++i)cin >> u >> v >> w, g[u][c[u]++] = {v, w}, g[v][c[v]++] = {u, w}, e[i] = {u, v, w}, f[find(u)] = find(v);sort(e, e+m);int ans = 0, cnt = 0;for (int i=1; i<=n; ++i) if (find(i) == i) ++cnt;for (int i=1; i<=n; ++i) f[i] = i;for (int i=0; i<m; ++i) {int x = find(e[i].u), y = find(e[i].v);if (x == y) continue;f[x] = y; cc[y] += cc[x];if (check(y)) ans += cc[y];if (++cnt == n) break;}return ans;
}int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int t; cin >> t;while (t--) cout << solve() << endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/41318.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剪画小程序:手机制作音乐串烧,用它,真的很简单!

Hello&#xff0c;大家好呀&#xff0c;我是不会画画的小画。 相伴关注歌手的小伙伴们&#xff0c;上周五的《歌手 2024》第八期大家看了吧&#xff01;那期节目里有好几首歌都让我沉醉其中&#xff0c;像汪苏泷的《听见下雨的声音》、谭维维的《兰花花儿》等等。 为了能让大…

c++之旅第十一弹——顺序表

大家好啊&#xff0c;这里是c之旅第十一弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一,数据结构…

基于docker环境及Harbor部署{很简短一点了,耐心看吧}

用到的环境&#xff1a; docker 、nacos、compose、harbor&#xff08;自行安装 ,以下连接作为参考&#xff09; nacos&#xff1a;史上最全整合nacos单机模式整合哈哈哈哈哈_nacos 源码启动 单机模式-CSDN博客 docker、compose、harbor:史上最全的整合Harbor安装教程&#…

ChatGPT:AOP配置中的切入点定义

ChatGPT&#xff1a;AOP配置中的切入点定义 <aop:pointcut id“addTime” expression“execution(* com.xrq.aop.HelloWorld.print*(…))” /> 这是什么 这是一个AOP&#xff08;面向方面编程&#xff09;配置中的切入点定义。AOP是一种编程范式&#xff0c;用于将跨越多…

把鼠标光标移到一段文字的首部,尾部,以及翻行查找文字等

如果当前的键盘无单独的End、Home、PgDn、PdUp。 1、如果光标在一段文字的中间&#xff1a; 需要快速移到文字尾部&#xff0c;按住&#xff1a;shiftEnd(如果End在数字1键扣上,shift1&#xff09; 需要快速移到文字首部&#xff1a;按住&#xff1a;shiftHome(如果End在数字…

vue2 img src 无法显示问题

1、页面标签这样写 <img :src"pdf2wordUrl" alt"Image">2、data这样定义 pdf2wordUrl: imgOff,3、import这样写 import imgOn from ../../assets/on.pngimport imgOff from ../../assets/off.png4、转换代码 if (type pdf2word) {this.convertTit…

xxx_proc 重写遇到的问题

1. & 与 && 的使用 需要使用 按位 & 逻辑时 &#xff0c;必须使用& &#xff1b; 其他非按位与 逻辑&#xff0c; 推荐使用 &&&#xff0c; 使用& 会导致覆盖率分析不全&#xff08;软件问题&#xff09; 2. 数据加&#xff0c;减溢出 数据…

数据结构之顺序表专题

在学习数据结构之前我们要先了解什么是数据结构&#xff1f; 1.数据结构相关概念 1.什么是数据结构&#xff1f; 数据结构是由“数据”和“结构”两词组合而来。 什么是数据?常见的数值1、2、3、4.、教务系统里保存的用户信息(姓名、性别、年龄、学历等等)、网页里肉眼可以…

qt 关于大端小端的一个实验 简单实验

1.概要 起因我用滚动是x86电脑&#xff0c;我用一个usort a11a ,我期待转换长的char字符应该是这样的“1aa1”,因为x86是小端的&#xff0c;这也是这个16位 类型的实际内存顺序&#xff0c;但是输出的结果是 “a11a”&#xff0c;难道这环境不是小端&#xff1f;难道qt能智能…

TensorBoard进阶

文章目录 TensorBoard进阶1.设置TensorBoard2.图像数据在TensorBoard中可视化3.模型结构在TensorBoard中可视化&#xff08;重点✅&#xff09;4.高维数据在TensorBoard中低维可视化5.利用TensorBoard跟踪模型的训练过程&#xff08;重点✅&#xff09;6.利用TensorBoard给每个…

complex复数库学习

此头文件是数值库的一部分。本篇介绍complex的基本用法。 常用的API如下&#xff1a; 运算 real 返回实部 (函数模板) imag 返回虚部 (函数模板) abs(std::complex) 返回复数的模 (函数模板) arg 返回辐角 (函数模板) norm 返回模(范数)的平方 (函数模板) conj 返回复共轭 (函…

桌面保存的Word文件删除怎么找回?超实用的三个方法?

在日常工作和学习中&#xff0c;我们经常会使用Word文档进行文字编辑和文件保存。但是&#xff0c;有时由于操作失误或系统故障&#xff0c;我们会不小心将存放在电脑桌面重要的Word文件删除了。导致无法挽回的损失&#xff0c;但幸运的是&#xff0c;有一些方法可以帮助我们找…

源代码防泄漏的制胜法宝——沙箱

沙箱技术作为现代信息安全领域的一种重要手段&#xff0c;其在源代码防泄密方面的应用愈发受到业界的关注。源代码作为企业或组织的核心资产&#xff0c;一旦泄露&#xff0c;不仅可能导致知识产权的流失&#xff0c;还可能对企业运营造成重大影响。因此&#xff0c;利用沙箱技…

Dark Brandon是什么梗:中英双语介绍

中文版 “Dark Brandon”是一个互联网梗和社交媒体现象&#xff0c;涉及到美国总统乔拜登的公众形象。这个梗通过呈现一个虚构的、往往是幽默的拜登形象&#xff0c;把他描绘成一个狡猾而强大的角色&#xff0c;与他平常的公众形象形成对比。以下是“Dark Brandon”梗的背景和…

跨境干货|最新注册Google账号方法分享

谷歌账号对做跨境外贸业务的人来说是刚需&#xff0c;目前来说大部分的海外社媒平台、工具都可以用谷歌账号来注册。但是仍然有很多朋友并不知道如何注册这个谷歌账号&#xff0c;今天就来给大家分享2个注册谷歌账号的方法&#xff0c;一个是手机号注册&#xff0c;一个是如何跳…

面向对象案例:电影院

TOC 思路 代码 结构 具体代码 Movie.java public class Movie {//一共七个private int id;private String name;private double price;private double score;private String director;private String actors;private String info;//get和setpublic int getId() {return id;…

opencv概念以及安装方法

#opencv相关概念介绍 Open Source Computer Vision Library 缩写 opencv 翻译&#xff1a;开源的计算机视觉库 &#xff0c;英特尔公司发起并开发&#xff0c;支持多种编程语言&#xff08;如C、Python、Java等&#xff09;&#xff0c;支持计算机视觉和机器学习等众多算法&a…

如何让自动化测试更加灵活简洁?

简化的架构对于自动化测试和主代码一样重要。冗余和不灵活性可能会导致一些问题&#xff1a;比如 UI 中的任何更改都需要更新多个文件&#xff0c;测试可能在功能上相互重复&#xff0c;并且支持新功能可能会变成一项耗时且有挑战性的工作来适应现有测试。 页面对象模式如何理…

DataWhale-吃瓜教程学习笔记 (七)

学习视频**&#xff1a;第6章-支持向量机_哔哩哔哩_bilibili 西瓜书对应章节&#xff1a; 第六章 支持向量机 - 算法原理 几何角度 对于线性可分数据集&#xff0c;找距离正负样本距离都最远的超平面&#xff0c;解是唯一的&#xff0c;泛化性能较好 - 超平面 - 几何间隔 例…

PostgreSQL批量向表中插入数据

PostgreSQL批量向表中插入数据 在 PostgreSQL 中&#xff0c;可以使用 PL/pgSQL 脚本通过 BEGIN … FOR … LOOP 语句来批量插入数据。这个方法非常适合需要编写过程逻辑来批量插入数据的场景。在这个例子中&#xff0c;我将演示如何使用一个循环从 1 到 10000&#xff0c;向表…