$P2872 [USACO07DEC]道路建设Building Roads$

Posted Isaunoya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了$P2872 [USACO07DEC]道路建设Building Roads$相关的知识,希望对你有一定的参考价值。

\\(problem\\)

错的原因是\\(RE\\)(大雾 , 时刻谨记 \\(N\\) 个地方的话 保守开 \\(\\frac{N^2}{2}\\) 大小。 因为是边。
边最多的情况即完全图 : $1+2+3+4...+n = \\frac{N*(N-1)}{2} $

所以还是个板子。

忽略丑陋的\\(2^{18}\\)

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
inline LL read () { LL res = 0 ;int f (1) ;char ch = getchar ();
    while (!isdigit(ch)) { if (ch == \'-\') f = -1 ;ch = getchar();}
    while (isdigit(ch)) res = (res << 1) + (res << 3) + (ch ^ 48) ,ch = getchar(); return res * f ;
}
const int Maxn = 1<<20 ;
int n , m ;
int x[Maxn];
int y[Maxn];
int f[Maxn];
int cnt = 0 ;
int top = 0 ;
double ans = 0.0 ;
struct P{ int x,y; double val;};
P a[Maxn] ;
inline bool cmp_(P a,P b) {
    if(a.val==b.val) return a.x<b.x;
    return a.val<b.val;
}
inline int find ( int x ) { return x == f[x] ? f[x] : f[x] = find(f[x]) ; }
inline void merge( int x , int  y) {
    f[ find(x) ] = find (y) ;
}
inline void kruskal() {
    int count = 0 ;
    sort(a+1,a+cnt+1,cmp_) ;
    for(register int i=1;i<=cnt;i++) {
        count ++ ;
        if(find(a[count].x) != find(a[count].y)) ans += a[i].val , merge(a[i].x,a[i].y) ;
        //if(count == n-1) break ;
    }
    return ;
}
signed main () {
    n=read(); m=read();
    for(register int i=1;i<=n;i++) {
        x[i]=read(),y[i]=read();
    }
    for(register int i=1;i<=n;i++) {
        f[i]=i;
    }
    for(register int i=1; i<=n; i++)
        for(register int j=i+1; j<=n; j++) {
        	cnt ++ ;
            a[cnt].x=i; a[cnt].y=j;
            a[cnt].val=sqrt(pow((x[i]-x[j]),2)+pow((y[i]-y[j]),2));
        }
    for(register int i=1;i<=m;i++) {
        int A=read(),B=read();
        cnt ++ ;
        a[cnt].x = A ; a[cnt].y = B ; a[cnt].val = 0.0 ;
    }
    kruskal() ;
    printf("%.2lf\\n",ans) ;
    return 0;
}

以上是关于$P2872 [USACO07DEC]道路建设Building Roads$的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1626 / P2872 [USACO07DEC]道路建设Building Roads

[USACO07DEC]道路建设Building Roads

[USACO07DEC]道路建设Building Roads

P2872 [USACO07DEC]Building Roads S

洛谷 P2872 [USACO07DEC]Building Roads S

P2872 [USACO07DEC]Building Roads Skruskal