[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 }
以上是关于[bzoj3479] [Usaco2014 Mar]Watering the Fields的主要内容,如果未能解决你的问题,请参考以下文章
BZOJ3477: [Usaco2014 Mar]Sabotage
bzoj 1597: [Usaco2008 Mar]土地购买 2011-12-27
[bzoj 1617]: [Usaco2008 Mar]River Crossing渡河问题 dp