BZOJ 3479: [Usaco2014 Mar]Watering the Fields(最小生成树)
2014-07-09 11:49
411 查看
这个= =最近刷的都是水题啊QAQ
排除掉不可能的边然后就最小生成树就行了= =
CODE:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 2010
struct edges{
int x,y,c;
}edge[maxn*maxn];
int l,x[maxn],y[maxn],n,c,ans,sum,f[maxn];
bool cmp(edges x,edges y) {return x.c<y.c;}
int addedge(int x,int y,int c){
edge[++l]=(edges){x,y,c};
}
int fin(int x) {if (x!=f[x]) f[x]=fin(f[x]);return f[x];}
int main(){
scanf("%d%d",&n,&c);
for (int i=1;i<=n;i++) scanf("%d%d",x+i,y+i);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if ((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])>=c)
addedge(i,j,(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
sort(edge+1,edge+l+1,cmp);
for (int i=1;i<=n;i++) f[i]=i;
for (int i=1;i<=l;i++){
int x=fin(edge[i].x),y=fin(edge[i].y);
if (x!=y){ans+=edge[i].c;sum++;if (sum>=n) break;f[x]=y;}
}
if (sum==n-1) printf("%d",ans);
else printf("-1");
return 0;
}
排除掉不可能的边然后就最小生成树就行了= =
CODE:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 2010
struct edges{
int x,y,c;
}edge[maxn*maxn];
int l,x[maxn],y[maxn],n,c,ans,sum,f[maxn];
bool cmp(edges x,edges y) {return x.c<y.c;}
int addedge(int x,int y,int c){
edge[++l]=(edges){x,y,c};
}
int fin(int x) {if (x!=f[x]) f[x]=fin(f[x]);return f[x];}
int main(){
scanf("%d%d",&n,&c);
for (int i=1;i<=n;i++) scanf("%d%d",x+i,y+i);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if ((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])>=c)
addedge(i,j,(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
sort(edge+1,edge+l+1,cmp);
for (int i=1;i<=n;i++) f[i]=i;
for (int i=1;i<=l;i++){
int x=fin(edge[i].x),y=fin(edge[i].y);
if (x!=y){ans+=edge[i].c;sum++;if (sum>=n) break;f[x]=y;}
}
if (sum==n-1) printf("%d",ans);
else printf("-1");
return 0;
}
相关文章推荐
- 【BZOJ3479】[Usaco2014 Mar]Watering the Fields【最小生成树】
- bzoj 3479: [Usaco2014 Mar]Watering the Fields 最小生成树
- 【BZOJ】3479: [Usaco2014 Mar]Watering the Fields(kruskal)
- BZOJ 3479: [Usaco2014 Mar]Watering the Fields( MST )
- bzoj3479 [Usaco2014 Mar]Watering the Fields(prim裸题)
- bzoj3479 [Usaco2014 Mar]Watering the Fields
- bzoj3479 [Usaco2014 Mar]Watering the Fields
- bzoj3479【Usaco2014 Mar】Watering the Fields
- BZOJ_3479_[Usaco2014 Mar]Watering the Fields_Prim
- bzoj 3479: [Usaco2014 Mar]Watering the Fields
- BZOJ3479: [Usaco2014 Mar]Watering the Fields
- BZOJ 1682 [Usaco2005 Mar] 最小生成树 解题报告
- BZOJ3476 : [Usaco2014 Mar]The Lazy Cow
- bzoj 1682: [Usaco2005 Mar]Out of Hay 干草危机(最小生成树)
- BZOJ 3476: [Usaco2014 Mar]The Lazy Cow
- BZOJ_3476_[Usaco2014 Mar]The Lazy Cow_扫描线+切比雪夫距离
- BZOJ_P1682 [Usaco2005 Mar]Out of Hay 干草危机(最小生成树)
- 【最小生成树】BZOJ1682[Usaco2005 Mar]-Out of Hay 干草危机
- 高中OJ3810. 【USACO2014 3月】Watering the Fields
- BZOJ3476 [Usaco2014 Mar]The Lazy Cow