[bzoj3479] [Usaco2014 Mar]Watering the Fields

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[bzoj3479] [Usaco2014 Mar]Watering the Fields相关的知识,希望对你有一定的参考价值。

  最小生成树。。。。

技术分享
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #define ll long long
 5 using namespace std;
 6 const int maxn=2023;
 7 int dis[maxn][maxn],d[maxn],x[maxn],y[maxn];
 8 bool u[maxn];
 9 ll ans;
10 int i,j,k,n,m,C;
11  
12 int ra;char rx;
13 inline int read(){
14     rx=getchar(),ra=0;
15     while(rx<0||rx>9)rx=getchar();
16     while(rx>=0&&rx<=9)ra*=10,ra+=rx-48,rx=getchar();return ra;
17 }
18 inline void prim(){
19     int i,j,mn,now;
20     for(i=1;i<=n;i++)d[i]=dis[1][i];d[0]=1e9;u[1]=1;
21     for(i=2;i<=n;i++){
22         mn=0;
23         for(j=1;j<=n;j++)if(!u[j]&&d[j]<d[mn]&&d[j]>=C)mn=j;
24         if(!mn){ans=-1;return;}
25         u[mn]=1,ans+=d[mn];//printf("mn:%d    %d\\n",mn,d[mn]);
26         for(j=1;j<=n;j++)if(!u[j]&&((dis[mn][j]<d[j]&&dis[mn][j]>=C)||(d[j]<C&&dis[mn][j]>=C)))d[j]=dis[mn][j];
27     }
28 }
29 int main(){
30     n=read(),C=read();
31     for(i=1;i<=n;i++){
32         x[i]=read(),y[i]=read();
33         for(j=1;j<i;j++)dis[i][j]=dis[j][i]=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
34         dis[i][i]=1e9;
35     }
36     prim();
37     printf("%lld\\n",ans);
38     return 0;
39 }
View Code

 

以上是关于[bzoj3479] [Usaco2014 Mar]Watering the Fields的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ3477: [Usaco2014 Mar]Sabotage

bzoj1597USACO 2008 Mar土地购买

bzoj 1597: [Usaco2008 Mar]土地购买 2011-12-27

[bzoj 1617]: [Usaco2008 Mar]River Crossing渡河问题 dp

bzoj1827[Usaco2010 Mar]gather 奶牛大集会*

BZOJ 1597: [Usaco2008 Mar]土地购买