码迷,mamicode.com
首页 > 其他好文 > 详细

P1550 [USACO08OCT]Watering Hole G

时间:2020-10-06 20:27:46      阅读:26      评论:0      收藏:0      [点我收藏+]

标签:usaco   return   scan   ++i   ++   iostream   add   main   code   

Miku

我们只需要一个额外的点代表水库

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int head[400];
int n;
int w[400];
int x,y,z;
struct b{
	int f;
	int to;
	int ne;
	int v;
}ed[200050];
int p;
int fa[400];
int find(int x){
	//cout<<x<<endl;
	return fa[x]==x ? x:fa[x]=find(fa[x]) ;
}
void add(int f,int to,int v){
	p++;
	ed[p].f=f;
	ed[p].ne=head[f];
	ed[p].to=to;
	ed[p].v=v;
	head[f]=p;
}
bool cmp(b x,b y){
	return x.v<y.v;
}
void kr(){
	int ans=0;
	int cnt=0;;
	int li=n-1;
	for(int i=1;i<=p;++i){
	//	cout<<i<<endl;
		if(find(ed[i].f)!=find(ed[i].to)){
	//		cout<<"sussed";
			fa[fa[ed[i].f]]=fa[ed[i].to];
			cnt++;
			ans+=ed[i].v;
			if(cnt==li)
			break;
		}
	}
	cout<<ans<<endl;
	return ;
}
int main(){
	scanf("%d",&n);
	n++;
	for(int i=1;i<n;++i){
		scanf("%d",&x);
		add(i,n,x);
	}
	for(int i=1;i<=n;++i)
		fa[i]=i;
	for(int i=1;i<n;++i){
		for(int j=1;j<n;++j){
			scanf("%d",&x);
			if(j>i){
				add(i,j,x);
			}
		}
	}
	sort(ed+1,ed+p+1,cmp);
//	cout<<324234;
	kr();
	return 0;
}

P1550 [USACO08OCT]Watering Hole G

标签:usaco   return   scan   ++i   ++   iostream   add   main   code   

原文地址:https://www.cnblogs.com/For-Miku/p/13772054.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!