首页 > 其他分享 >最小生成树+点乘原理

最小生成树+点乘原理

时间:2023-03-28 22:27:39浏览次数:43  
标签:cost int 最小 生成 fa edge 原理 check

  • 点乘原理
    对于两个向量,最小向量点乘即为向量中最大的去乘另外一个向量中最小的,重复执行,最后的结果即为最小的
    image
  • 观察题意,易得二分答案p,再写一个check()函数即可
  • 在check过程中,对于损坏值小于p的路径,直接计入,求出最小生成树,最后记录最小生成树的边,使用点乘原理,以最有顺序修路。
    https://ac.nowcoder.com/acm/contest/52441/D
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,c,p;
int fa[2000010];
struct node{
    int st;
    int to;
    int cost;
    bool operator < (const node&a) const{
        return cost < a.cost;
    }
}edge[2000010];
int find(int x){
    if(fa[x]==x) return x;
    else{
        fa[x] = find(fa[x]);
        return fa[x];
    }
}
void merge(int x,int y){
    fa[find(x)] = find(y);
    return;
}
bool check(int number){
    for(int i = 1;i<=n;i++) fa[i] = i;
    int sum = 0;
    int ans[1000000];
    int cnt = 0;
    for(int i = 1;i<=m;i++){
        if(edge[i].cost<=number){
            merge(edge[i].st,edge[i].to);
            continue;
        }
        if(find(edge[i].st)!=find(edge[i].to)){
            merge(edge[i].st,edge[i].to);
            ans[++cnt] = edge[i].cost;
        }
    }
    sort(ans+1,ans+1+cnt);
    int op = 1;
    for(int i = cnt;i>=1;i--){
        sum += ans[i]*op;
        op++;
    }
    if(sum<=c) return true;
    else return false;
}
signed main(){
    cin>>n>>m>>c;
    int x,y,z;
    for(int i = 1;i<=m;i++){
        cin>>edge[i].st>>edge[i].to>>edge[i].cost;
    }
    sort(edge+1,edge+1+m);
    int l = 0;
    int r = 1e18;
    while(l<=r){
        int mid = (l+r)>>1;
        if(check(mid)) p = mid,r = mid-1;
        else l = mid+1;
    }
    cout<<p<<endl;
}

标签:cost,int,最小,生成,fa,edge,原理,check
From: https://www.cnblogs.com/wujw11world/p/17266981.html

相关文章

  • 一文剖析:LVS/Nginx/HAProxy原理及应用场景
    负载均衡已经发展成为网络架构中的基础核心组件,消除了服务器单点故障,可以进行请求流量分流,提升冗余,保证服务器的稳定性。在开源的软件负载均衡中,应用最为广泛的有LVS、Nginx......
  • Java 生成各种 PDF 实战方案(图片、模板、表格)
    刚接到了一个需求,生成一个pdf,一开始以为挺简单的,通过模板生成嘛,我也发过相应的文章,根据模板直接生成pdf,响应到前端或者根据模板生成pdf,直接指定下载位置,这两种方案都可以,......
  • 19-springboot自动配置原理
    SpringBoot自动配置原理(SpringBoot自动装配原理,SpringBootstarter原理)SpringBoot可以根据定义在classpath下的类,自动的给你生成一些Bean,并加载到Spring的Context中,自动配......
  • k8s service原理
    1.为什么需要servicePod是非永久性资源,会动态创建和销毁,pod的ip会变化,而service会动态感知pod的变化,而对调用方无感知,调用方只需要访问固定的servicename就可以动态地访......
  • SMT轨迹导入程序C#导入CAD的DXF文件生成G代码源码
    SMT轨迹导入程序C#导入CAD的DXF文件生成G代码源码YID:9212643822624356......
  • mongodb和redis设计原理简析
    redis:1、NIO通信  因都在内存操作,所以逻辑的操作非常快,减少了CPU的切换开销,所以为单线程的模式(逻辑处理线程和主线程是一个)。  reactor模式,实......
  • 剑指offer11(Java)-旋转数组中的最小值(简单)
    题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行......
  • 交换机的工作原理
    1.以太网帧的格式包的数据大小有(46---1500字节),帧的数据大小有(64---1518字节)帧是将目标地址、源地址等都进行了封装2.交换机的工作原理2.1插上交换机进入初始状态交换......
  • 考虑需求侧响应的微电网多目标经济运行 建立了含风光储荷的微电网模型,以发电侧成本(
    考虑需求侧响应的微电网多目标经济运行 建立了含风光储荷的微电网模型,以发电侧成本(包括风光储以及电网的购电成本)和负荷侧成本最小为目标,考虑功率平衡以及储能SOC约束,......
  • C# 富文本内容生成PDF,用开源免费的类库
    要使用C#生成PDF文件,可以使用iTextSharp这个免费开源的类库。iTextSharp提供了丰富的API,可以用来生成PDF文档、表格、图表、图片等内容。以下是一个简单的示例代码,用于将......