题解 | #信号覆盖#

信号覆盖

https://www.nowcoder.com/practice/35175cee9e634b92b35b634244d81feb

#include<bits/stdc++.h> 

using namespace std;

vector<int> xarr,yarr;

struct Node{
    int u,v; // 点!
    int dis;
    Node(int _u,int _v,int _dis):u(_u),v(_v),dis(_dis){}
    
    bool operator <(const Node& node){
        return dis < node.dis;
    }
    
} ;


int find(vector<int>& father,int u){
    if(father[u] == u) return u;
    return find(father,father[u]);
}


int distance(int u,int v){
    int xx = xarr[u] - xarr[v];
    int yy = yarr[u] - yarr[v];
    return xx*xx + yy*yy;
}

int main(){
    int n,k;
    cin >> n >> k;
    xarr.resize(n); yarr.resize(n);
    
    
    for(int i = 0; i < n; i++){
        cin >> xarr[i] >> yarr[i];
    }
    
    vector<Node> arr;
    
    for(int i = 0; i < n; i++){
        for(int j = i+1; j < n; j++){
            arr.emplace_back(Node(i,j,distance(i,j)));
        }
    }
    
    sort(arr.begin(),arr.end());
    
    if(k == 1){
        cout << 0 << endl;
        return 0;
    }
    
    vector<int> father(n);
    
    for(int i = 0; i < n; i++) father[i] = i;
    
    vector<int> size(n,1);
    
    for(Node node : arr){
        int f1 = find(father,node.u);
        int f2 = find(father,node.v);
        
        if(f1 != f2){
            father[f1] = f2;
            size[f2] += size[f1];
            if(size[f2] >= k){
                cout << node.dis << endl;
                return 0;
            }
        }
       
    }
    assert(0);
    return 0;
}

全部评论

相关推荐

双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务