当前位置: 首页 > 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;
}

http://www.lryc.cn/news/297566.html

相关文章:

  • 深入浅出:Golang的Crypto/SHA256库实战指南
  • Unity_ShaderGraph节点问题
  • Java集合 Collection接口
  • C# Task的使用
  • 尚硅谷Ajax笔记
  • 【MATLAB源码-第138期】基于matlab的D2D蜂窝通信仿真,对比启发式算法,最优化算法和随机算法的性能。
  • AcWing 第 142 场周赛 B.最有价值字符串(AcWing 5468) (Java)
  • 滑块识别验证
  • 每日五道java面试题之java基础篇(四)
  • 我的docker随笔43:问答平台answer部署
  • 17、ELK
  • React+Antd+tree实现树多选功能(选中项受控+支持模糊检索)
  • 鸿蒙 WiFi 扫描流程(2)
  • 微信小程序(四十)API的封装与调用
  • WebSocket+Http实现功能加成
  • go语言实现LRU缓存
  • git的奇特知识点
  • 按键扫描16Hz-单片机通用模板
  • 在容器镜像中为了安全为什么要删除 setuid 和 setgid?
  • Flink 动态表 (Dynamic Table) 解读
  • 【原创 附源码】Flutter海外登录--Google登录最详细流程
  • 第70讲axios后端请求工具类封装
  • 【数学建模】【2024年】【第40届】【MCM/ICM】【F题 减少非法野生动物贸易】【解题思路】
  • 第3节、电机定速转动【51单片机+L298N步进电机系列教程】
  • 【51单片机】LCD1602(可视化液晶屏)调试工具的使用
  • Netty应用(四) 之 Reactor模型 零拷贝
  • Huggingface上传模型
  • kyuubi 接入starrocks | doris
  • notepad++成功安装后默认显示英文怎么设置中文界面?
  • HiveSQL——连续增长问题