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

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

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

解法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;
}

相关文章:

  • java 回答问题
  • Blender教程(基础)-顶点的移动、滑移-16
  • go-基于逃逸分析来提升性能程序
  • Java基础常见面试题总结-集合(二)
  • 6. 尚硅谷大数据111门技术+42个项目
  • 测试:JMeter如何获取非json格式的响应参数
  • flink写入es的参数解析
  • MongoDB聚合: $sortByCount
  • Adobe Camera Raw for Mac v16.1.0中文激活版
  • 【蓝桥杯单片机记录】IO基础与LED控制
  • 手动汉化unity编辑器,解决下载中文语言报错问题
  • STM32F407 CAN参数配置 500Kbps
  • 堆的数据结构以及堆的相应操作
  • ZooKeeper安装及配置(Windows版)
  • docker重建镜像
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【Linux系统编程】快速查找errno错误码信息
  • exports和module.exports
  • Java 最常见的 200+ 面试题:面试必备
  • Mac转Windows的拯救指南
  • miaov-React 最佳入门
  • Odoo domain写法及运用
  • Python进阶细节
  • underscore源码剖析之整体架构
  • 第十八天-企业应用架构模式-基本模式
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 小试R空间处理新库sf
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 因为阿里,他们成了“杭漂”
  • 用jquery写贪吃蛇
  • 中文输入法与React文本输入框的问题与解决方案
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 仓管云——企业云erp功能有哪些?
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • #android不同版本废弃api,新api。
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (30)数组元素和与数字和的绝对差
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot教学评价 毕业设计 641310
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (三分钟)速览传统边缘检测算子
  • (转)Google的Objective-C编码规范
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)linux下的时间函数使用
  • (转)可以带来幸福的一本书
  • *Django中的Ajax 纯js的书写样式1
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理出现中文乱码的情况
  • .NET : 在VS2008中计算代码度量值
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET 表达式计算:Expression Evaluator
  • .NET 常见的偏门问题
  • .NET/C# 使用反射注册事件