• 【题解】Luogu P2212 [USACO14MAR] 浇地 Watering the Fields 最小生成树


    裸的板子,判一下d和c的大小

    我菜死了,kruskal写挂的原因竟然是,sort的范围错了

    WA到爆了

    kruskal都忘了怎么写,赶快滚去复习

    code

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 namespace gengyf{
     4 #define ll long long
     5 const int maxn=1e6+10;
     6 inline int read(){
     7     int x=0,f=1;
     8     char c=getchar();
     9     while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    10     while(c>='0'&&c<='9'){x=(x*10)+c-'0';c=getchar();}
    11     return x*f;
    12 }
    13 int n,c,x[maxn],y[maxn],fa[maxn];
    14 struct edge{
    15     int u,v;
    16     ll w;
    17 }e[maxn*2];
    18 int head[maxn],cnt;
    19 inline void add(int u,int v,int w){
    20     e[++cnt].u=u;e[cnt].v=v;e[cnt].w=w;
    21 }
    22 bool cmp(edge a,edge b){
    23     return a.w<b.w;
    24 }
    25 int find(int x){
    26     return x==fa[x]?x:fa[x]=find(fa[x]);
    27 }
    28 void kruskal(){
    29     int ans=0,tot=0;
    30     for(int i=1;i<=cnt;i++){
    31         int u=find(e[i].u),v=find(e[i].v);
    32         if(u!=v){
    33             fa[u]=v;
    34             ans+=e[i].w;tot++;
    35         }
    36         if(tot==n-1)break;
    37     }
    38     if(tot==n-1)printf("%d
    ",ans);
    39     else puts("-1");
    40 }
    41 int main(){
    42     n=read();c=read();
    43     for(int i=1;i<=n;i++){
    44         x[i]=read();y[i]=read();
    45         for(int j=1;j<i;j++){
    46             int d=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
    47             if(d>=c){
    48                 add(i,j,d);
    49             }
    50         }
    51     }
    52     sort(e+1,e+1+cnt,cmp);
    53     for(int i=1;i<=n;i++)fa[i]=i;
    54     kruskal();
    55     return 0;
    56 }
    57 }
    58 signed main(){
    59   gengyf::main();
    60   return 0;
    61 }
    View Code
  • 相关阅读:
    VMware Workstation 中安装Redhat linux 9.0
    暑假的总结
    [转载]控制理论 VS 股票
    一些股票术语
    28、linux shell常用的几个函数,split
    35、linux shell常用函数,ps
    shell命令wc,md5sum,basename
    linux shell,tr命令
    36、linux shell常用函数,pgrep
    37、linux shell常用函数,top
  • 原文地址:https://www.cnblogs.com/gengyf/p/11629882.html
Copyright © 2020-2023  润新知