题解 | #信号覆盖#

信号覆盖

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

全部评论

相关推荐

菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:52
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务