备战蓝桥杯---搜索(完结篇)

再看一道不完全是搜索的题:

解法1:贪心+并查集:

把冲突事件从大到小排,判断是否两个在同一集合,在的话就返回,不在的话就合并。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,a,b,c;
struct node{int x,y,qi;
}a1[100010];
int fa[50000];
bool cmp(node a,node b){return a.qi>b.qi;
}
int find(int x){if(fa[x]==x) return x;else return fa[x]=find(fa[x]);
}
void merge(int x,int y){fa[find(x)]=find(y);
}
int main(){cin>>n>>m;for(int i=1;i<=m;i++){scanf("%d%d%d",&a1[i].x,&a1[i].y,&a1[i].qi);}for(int i=1;i<=2*n+1;i++){fa[i]=i;}sort(a1+1,a1+1+m,cmp);int f=0;for(int i=1;i<=m;i++){int xx=a1[i].x;int yy=a1[i].y;if(find(xx)==find(yy)){cout<<a1[i].qi;f=1;break;}else{merge(xx,n+yy);merge(xx+n,yy);}}if(f==0) cout<<0;
}

解法2:二分+DFS

显然这是一个0/1单调函数,我们可以进行二分。那我们二分出值如何判断是否可行?

我们可以把有怨气值的连边,对每个联通块种的大于二分值的DFS,先把自己-》1,与他相连的赋为0,以此类推,看是否有两个0/1值相同并相连的节点。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,a,b,c,qi;
struct node{int aa,qi1;
};
vector<node> tu[20005];
int vis[20005];
int heibai[20005];
int dfs(int x,int fa,int mid){int f=0;vis[x]=1;heibai[x]=1-heibai[fa];for(int i=0;i<tu[x].size();i++){if(tu[x][i].qi1<=mid) continue;if(tu[x][i].aa==fa) continue;if(vis[tu[x][i].aa]==1&&heibai[tu[x][i].aa]==heibai[x]){f=1;continue;}if(vis[tu[x][i].aa]==1) continue;if(dfs(tu[x][i].aa,x,mid)==1) f=1;}
return f;
}
int check(int mid){memset(vis,0,sizeof(vis));memset(heibai,0,sizeof(heibai));int f=1;for(int i=1;i<=n;i++){if(vis[i]==1) continue;if(dfs(i,0,mid)==1){f=0;break;}}return f;
}
signed main(){cin>>n>>m;for(int i=1;i<=m;i++){scanf("%d%d%d",&a,&b,&c);tu[a].push_back({b,c});tu[b].push_back({a,c});qi=max(qi,c);}int i=0,j=qi;while(i<j){int mid=(i+j)/2;if(check(mid)==1) j=mid;else i=mid+1;}cout<<i;
}

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

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

相关文章

LeetCode-第28题-找出字符串中第一个匹配项的下标

1.题目描述 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 2.样例描述 3.思路描述 可以让字符串 …

Apache Flink

前言 最近在学习室内融合定位服务架构&#xff0c;业务架构上&#xff0c;涵盖了数据采集、处理、状态管理、实时计算和告警等多个方面&#xff0c;但有些问题&#xff1a;这套系统中包含了大量的有状态计算&#xff0c;目前是通过自设计内存对象进行管理&#xff0c;并利用Re…

迎新年年终总结

迎新年年终总结 1、除夕迎新年登高有感 1、除夕迎新年登高有感 除旧岁&#xff0c;迎新年。凭栏立&#xff0c;意阑珊。 天空阔&#xff0c;世道艰。唯自强&#xff0c;可彼岸。 于2024年2月9日 10:51。

【前端web入门第四天】01 复合选择器与伪类选择器

文章目录: 1. 复合选择器 1.1 后代选择器 1.2 子代选择器 1.3 并集选择器1.4 交集选择器(了解) 2.伪类选择器 2.1 伪类-文本2.2 伪类-超链接&#xff08;拓展) 1. 复合选择器 什么叫复合选择器? 由两个或多个基础选择器&#xff0c;通过不同的方式组合而成。 复合选择器的作…

158基于matlab的用于分析弧齿锥齿轮啮合轨迹的程序

基于matlab的用于分析弧齿锥齿轮啮合轨迹的程序&#xff0c;输出齿轮啮合轨迹及传递误差。程序已调通&#xff0c;可直接运行。 158 matlab 弧齿锥齿轮啮合轨迹 传递误差 (xiaohongshu.com)

RedissonClient妙用-分布式布隆过滤器

目录 布隆过滤器介绍 布隆过滤器的落地应用场景 高并发处理 多个过滤器平滑切换 分析总结 布隆过滤器介绍 布隆过滤器&#xff08;Bloom Filter&#xff09;是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是…

openssl3.2 - exp - RAND_bytes_ex

文章目录 openssl3.2 - exp - RAND_bytes_ex概述笔记END openssl3.2 - exp - RAND_bytes_ex 概述 生成随机数时, 要检查返回值是否成功, 不能认为一定是成功的(官方文档上有说明). 生成随机数的API, 和库上下文有关系, 使用RAND_bytes_ex()比RAND_bytes()好些. 笔记 /*! * …

SolidWorks的抽壳

抽壳在建模的时候是比较常见的要求&#xff0c;这里废话不多说&#xff0c;直接开始实例操作。 文章目录 一、规则实体抽壳2、多面抽壳3、空心化抽壳 二、椎体抽壳三、不规则实体抽壳1、不规则实体2、部分实体抽壳 文章随时可能更新&#xff0c;请关注文章原出处&#xff1a; …

LeetCode:210课程表Ⅱ(图论:拓扑排序判断是否有环)

做本题之前最好先做了LeetCode&#xff1a;207课程表&#xff0c;见本人另一篇博客http://t.csdnimg.cn/vSXgN 题目 现在你总共有 numCourses 门课需要选&#xff0c;记为 0 到 numCourses - 1。给你一个数组 prerequisites &#xff0c;其中 prerequisites[i] [ai, bi] &am…

sql常用函数积累(非窗口函数)

1.concat 在 SQL 中&#xff0c;concat函数用于将两个或多个字符串值连接成一个字符串 例如&#xff0c;如果有一个包含姓氏&#xff08;last_name&#xff09;和名字&#xff08;first_name&#xff09;的表&#xff0c;可以使用 CONCAT 来生成一个完整的姓名&#xff1a; …

JVM之GC垃圾回收

GC垃圾回收 如何判断对象可以回收 引用计数法 如果有对象引用计数加一&#xff0c;没有对象引用&#xff0c;计数减一&#xff0c;如果计数为零&#xff0c;则回收 但是如果存在循环引用&#xff0c;即A对象引用B对象&#xff0c;B对象引用A对象&#xff0c;会造成内存泄漏 可…

Gitlab和Jenkins集成 实现CI (二)

Gitlab和Jenkins集成 实现CI (一) Gitlab和Jenkins集成 实现CI (二) Gitlab和Jenkins集成 实现CI (三) 配置Gitlab api token 配置 Gitlab 进入gitlab #mermaid-svg-t84fR8wrT4sB4raQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:…

【芯片设计- RTL 数字逻辑设计入门 6 -- 带同步复位的D触发器 RTL实现及testbench 验证】

文章目录 带同步复位的D触发器Verilog 代码testbench 代码编译及仿真问题小结 带同步复位的D触发器 同步复位 &#xff1a;复位只能发生在在clk信号的上升沿&#xff0c;若clk信号出现问题&#xff0c;则无法进行复位。 Verilog 代码 // timescale ins/1nsmodule flopr (inpu…

第60讲公共Tabs组件封装

新建Tabs组件 Tabs.wxml <view class"tabs"><view class"tabs_title"><viewbindtap"handleItemTap"data-index"{{index}}"wx:for"{{tabs}}"wx:key"id"class"title_item {{item.isActive?ac…

Django(十)

1. Ajax请求 浏览器向网站发送请求时&#xff1a;URL 和 表单的形式提交。 GETPOST 特点&#xff1a;页面刷新。 除此之外&#xff0c;也可以基于Ajax向后台发送请求&#xff08;偷偷的发送请求&#xff09;。 依赖jQuery编写ajax代码 $.ajax({url:"发送的地址"…

如何利用chatgpt提升工作效率?

在数字化和信息化的时代&#xff0c;人工智能技术已经深入到了我们生活的方方面面。其中&#xff0c;ChatGPT作为当前热门的人工智能技术&#xff0c;以其强大的自然语言处理能力和广泛的应用场景&#xff0c;正逐渐改变着我们的工作方式&#xff0c;为我们提高工作效率提供了全…

电脑服务器离线安装.net framework 3.5解决方案(错误:0x8024402c )(如何确定当前系统是否安装NET Framework 3.5)

问题环境&#xff1a; 日常服务的搭建或多或少都会有需要到NET Framework 3.5的微软程序运行框架&#xff0c;本次介绍几种不同的安装方式主要解决运行在Windows 2012 以上的操作系统的服务。 NET Framework 3.5 是什么&#xff1f; .NET Framework是微软公司推出的程序运行框架…

BTC交易数据 - 文章索引

BTC交易数据系列文章索引 如果你对比特币交易技术感兴趣&#xff0c;这一系列深度解析文章绝对值得一读。从 BTC 交易数据的总览、VarInt 类型的详解&#xff0c;到 nLockTime 的应用和比特币脚本的执行过程&#xff0c;每篇文章都揭示了比特币交易背后的精妙机制。无论你是初学…

vscode +markdown 的安装和使用

文章目录 前言一、vscode markdown 是什么&#xff1f;1.vscode是什么&#xff1f;2.markdown 是什么&#xff1f; 二、安装步骤1.下载2.安装 三、安装插件1.安装 Markdown All in One2.安装 Markdown Preview Enhanced3. Paste Image v1.0.44.LimfxCodeExv0.7.105.Code Spell …

【小程序】基础API——多语言API接口介绍

ty.getLangContent 获取多语言 需引入BizKit&#xff0c;且在>3.0.0版本才可使用 参数 Object object 属性类型默认值必填说明completefunction否接口调用结束的回调函数&#xff08;调用成功、失败都会执行&#xff09;successfunction否接口调用成功的回调函数failfunc…