F 最便宜的构建

news/2024/11/29 20:32:13/

题目

1.最大的最小,最小的最大-》二分

2.二分答案,check

3.并差集,是否在一个联通块中

#include<iostream>
#include<algorithm>
#include<numeric>//accumulate(be,en,0)
#include<cstring>//find("string"),rfind("string"),s.find(string,begin)!=s.npos
#include<string>//to_string(value)
#include<cstdio>
#include<cmath>
#include<vector>//res.erase(unique(res.begin(), res.end()), res.end()),reverse(q.begin(),q.end());
#include<queue>//priority_queue(big)  /priority_queue<int, vector<int>, greater<int>> q(small)
#include<stack>
#include<map>//unordered_map
#include<set>//iterator,insert(),erase(),lower(>=)/upper_bound(>)(value)/find()return end()
#define ll long long
#define PII pair<int,int>
#define f first
#define s second
using namespace std;
const int inf = 0x3f3f3f3f, N = 1e5 + 5;
int n, m, k;
struct nod
{int u, v, w;
};
struct nod p[N];
bool cmp(nod k1, nod k2)
{return k1.w < k2.w;
}
vector<int>q[N];
int d[N];
int find(int x)
{if (d[x] != x) return d[x] = find(d[x]);return x;
}
bool check(int x)
{for (int i = 1; i <= n; i++) d[i] = i;int l = -1, r = m-1;while (l < r){int mid = (l + r + 1) >> 1;if (p[mid].w > x) r = mid - 1;else l = mid;}for (int i = 0; i <= l; i++) {d[find(p[i].u)] = find(p[i].v);}for (int i = 0; i < k; i++) {for (int j = 1; j < q[i].size(); j++) {if (find(q[i][j]) != find(q[i][0])) return false;}}return true;
}
signed main()
{ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0);cin >> n >> m;for (int i = 1; i <= n; i++) d[i] = i;for (int i = 0; i < m; i++) {int u, v, w;cin >> u >> v >> w;p[i] = { u,v,w };}sort(p, p + m, cmp);cin >> k;for (int i = 0; i < k; i++){int s;cin >> s;for (int j = 0; j < s; j++) {int tmp;cin >> tmp;q[i].push_back(tmp);}}int l = 0, r = 1e9;while (l < r){int mid = (l + r) >> 1;if (check(mid)) r = mid;else l = mid + 1;}cout << l;
}

二分两个模板

while(l<r){int mid=l+r>>1;if(check(mid)) r=mid;else l=mid+1;return l;//最后返回的l'到r都满足check}//分成[l,mid]和[mid+1,r]//check是[mid+1,r]的性质
while(l<r){int mid=l+r+1>>1;if(check(mid)) r=mid-1;else l=mid;return l;//最后返回的l到l'都不满足check}//分成[l,mid-1]和[mid,r]//check是[mid,r]的性质 


http://www.ppmy.cn/news/437559.html

相关文章

汽车费用(完全背包)

一个特别的单行街道在每公里处有一个汽车站。顾客根据他们乘坐汽车的公里使来付费。例如下表就是一个费用的单子。 没有一辆车子行驶超过10公里&#xff0c;一个顾客打算行驶n公里&#xff08;1< n< 100&#xff09;&#xff0c;它可以通过无限次的换车来完成旅程。最后…

如何买到最便宜的机票

全网最低价机票购买指南&#xff1a; 现在航空公司官网注册好会员&#xff0c;提前两个月订票绝对便宜 中国四大航空公司会员日&#xff1a; 中国航空公司&#xff1a;每个月的同月同日&#xff08;eg&#xff1a;01.01 02.02 03.03 04.04 05.05 06.06等等&#xff09; 南方航…

云原生之使用Docker部署Dashy个人导航页

云原生之使用Docker部署Dashy个人导航页 一、Dashy介绍1.1 Dashy简介1.2 Dashy特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、部署前准备工作4.1下载Dashy源码包4.2 查看D…

搭建环境【2】windows主机和ubuntu互传文件的4种方法

我的ubuntu系统是安装在 VMware 虚拟机中的&#xff0c;两者之间经常要互传文件&#xff0c;下面介绍4种常用的互传文件方法。 1. 共享文件夹方式互传 在虚拟机中需要开启共享文件夹的功能。首先虚拟机中的ubuntu要求是已经开机了的状态&#xff0c;然后进行设置&#xff1a;…

预测神经胶质瘤基因型的多模态学习

文章目录 Multi-modal learning for predicting the genotype of glioma摘要本文方法多模态数据生成Brain networks construction via self-supervised NNsMulti-modal learning for image, geometrics and brain networksBi-level multi-modal contrastive loss Population gr…

第15章_锁

第15章_锁 事务的 隔离性 由这章讲述的 锁 来实现。 1. 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题&#xff0c;当多个线程并发访问某个数据的时候&#xff0c;尤其是针对一些敏感的数据&#xff08;比如订单、金额等)&…

count() 优化

Q: 为什么别人问你MySQL优化的知识 总是没有底气. A: 因为你只是回答一些大而化之的调优原则, 比如:”建立合理索引”(什么样的索引合理?) “分表分库”(用什么策略分表分库?) “主从分离”(用什么中间件?) 并没有从细化到定量的层面去分析. 如qps提高了%N? 有没有减少文件…

多线程与多进程

多线程与多进程 知识预览 一 进程与线程的概念二 threading模块三 multiprocessing模块四 协程五 IO模型 回到顶部 一 进程与线程的概念 1.1 进程 考虑一个场景&#xff1a;浏览器&#xff0c;网易云音乐以及notepad 三个软件只能顺序执行是怎样一种场景呢&#xff1f;另外&am…