zoukankan      html  css  js  c++  java
  • Watering the Fields(irrigation)

    #include <cstdio>
    #include <algorithm>
    struct edge{
    	int f,t,w;
    } ed[5000000];
    int pl,n,c,i,j,k,l,f[3000],x[3000],y[3000],t,ps,sum,t2;
    inline void addedge(int f,int t,int w){
    	ed[++pl].t=t;
    	ed[pl].w=w;
    	ed[pl].f=f;
    }
    inline int find(int x){
    	t=x;
    	while(f[x]) x=f[x];
    	while(f[t]) t2=f[t],f[t]=x,t=t2;
    	return x;
    }
    bool merge(int a,int b){
    	a=find(a),b=find(b);
    	if(a==b) return false;
    	f[a]=b;
    	return true;
    }
    inline int dist(int x,int y){
    	return x*x+y*y;
    }
    bool cmp(edge a,edge b){
    	return a.w<b.w;
    }
    int main(){
    	scanf("%d%d",&n,&c);
    	for(i=1;i<=n;++i){
    		scanf("%d%d",x+i,y+i);
    	}
    	t=0;
    	for(i=1;i<n;++i){
    		for(j=i+1;j<=n;++j){
    			if((k=dist(x[i]-x[j],y[i]-y[j]))>=c){
    				addedge(i,j,k);
    			}
    		}
    	}
    	++pl;
    	std::sort(ed+1,ed+pl,cmp);
    	ps=n-1;
    	i=1;
    	while(ps && i<pl){
    		if(merge(ed[i].f,ed[i].t)) --ps,sum+=ed[i].w;
    		++i;
    	}
    	if(ps) printf("-1
    "); else printf("%d
    ", sum);
    	return 0;
    }
    

    这个kruskal不知为何丧心病狂地慢..膜拜WJZ大神只有100+ms...700+ms的蒟蒻给跪

  • 相关阅读:
    CR开发笔记-1工作前的准备
    CR开发笔记-2基础飞机的搭建以及测试代码
    c++还有一个小时考试
    c# winform 打印笔记
    aspcms部署
    c#复习笔记 继承
    [转]IoC框架
    Cinder-2 窗口的创建过程
    Cinder-1 TinderBox
    admin模板
  • 原文地址:https://www.cnblogs.com/tmzbot/p/4043128.html
Copyright © 2011-2022 走看看