[USACO08OCT]Watering Hole

来源:互联网 发布:mac版本qq游戏大厅 编辑:程序博客网 时间:2024/04/30 20:46

传送门
Farmer John has decided to bring water to his N (1 <= N <= 300) pastures which are conveniently numbered 1..N. He may bring water to a pasture either by building a well in that pasture or connecting the pasture via a pipe to another pasture which already has water.

Digging a well in pasture i costs W_i (1 <= W_i <= 100,000).

Connecting pastures i and j with a pipe costs P_ij (1 <= P_ij <= 100,000; P_ij = P_ji; P_ii=0).

Determine the minimum amount Farmer John will have to pay to water all of his pastures.

POINTS: 400
输入格式:
第1 行为一个整数n。

第2 到n+1 行每行一个整数,从上到下分别为W_1 到W_n。

第n+2 到2n+1 行为一个矩阵,表示需要的经费(P_ij)。

输出格式:
只有一行,为一个整数,表示所需要的钱数。
输入样例#1:
4
5
4
4
3
0 2 2 2
2 0 3 3
2 3 0 4
2 3 4 0
输出样例#1:
9

获得最小生成树的新姿势×1

设定一个事实上不存在的点,将所有的点向其连边,边权为在该土地上打井所需的费用,正常做最小生成树,AC~
我才不会告诉你我把并查集写错了呢

CODE:

#include<cstdio>#include<iostream>#include<algorithm>using namespace std;struct aa{    int from,to,dis;}a[100001];int w[301];int c[301][301];int f[305];int n,num,k,x,y,ans;inline void read(int &n){    n=0;char c;bool b=0;    while((c=getchar())==' '||c=='\n'||c=='\r');    if(c=='-') b=1;    else n=c-48;    while(isdigit(c=getchar())) n=n*10+c-48;    if(b) n*=-1;}inline void add(int from,int to,int dis){    a[++num].from=from,a[num].to=to,a[num].dis=dis;}int find(int n){    if(f[n]!=n) f[n]=find(f[n]);    return f[n];}bool cmp(aa a,aa b){    return a.dis<b.dis;}int main(){    read(n);    for(int i=1;i<=n;i++)      read(w[i]);    for(int i=1;i<=n;i++)      for(int j=1;j<=n;j++)        read(c[i][j]);    for(int i=1;i<=n;i++)      f[i]=i;    for(int i=1;i<=n;i++)      for(int j=1;j<i;j++)        add(i,j,c[i][j]);    for(int i=1;i<=n;i++)      add(0,i,w[i]);    sort(a+1,a+num+1,cmp);    for(int i=1;i<=num;i++)    {        x=find(a[i].from),y=find(a[i].to);        if(x!=y)        {            f[y]=x;            ans+=a[i].dis;            k++;        }        if(k==n) break;    }    printf("%d",ans);    return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 济宁二院怎么办健康证 刚按揭车的想卖怎么办 房子已过户银行不放贷怎么办 办房贷信用逾期给拒了怎么办 二手房过户了房贷下不来怎么办 没有房证的房子买卖怎么办 老公失踪房产证要他签字怎么办 税务机关对长期欠税怎么办 离婚有贷款的房子怎么办 买房没过户房主反悔怎么办 房子过户卖方爱人去世怎么办 黄浦区学生社会实践护照掉了怎么办 北京医保卡坏了怎么办 去了越南的签证怎么办 护照签证到期还在国外怎么办 办护照预约满了怎么办 未满16岁怎么办护照 办理护照采集指纹录不上怎么办 办理护照时指纹没有怎么办 未满16岁的怎么办护照 身份证照得太丑怎么办 武汉江夏怎么办健康证 小孩偏胖肚子大怎么办 手机安全中心密码忘记了怎么办 进京证一年12次怎么办 青霉素和头孢都过敏怎么办 手汗孢疹肿胀怎么办能吃消炎药吗 手机上办进京证怎么办 杭州公共自行车还车点满了怎么办 法院判决书下来对方不给钱怎么办 抓进看守所的人怎么办 在拘留所里病重抢救怎么办 昆明公租房户型确认后怎么办 18年工作好难找怎么办 我没工作了怎么办2018 婚姻质量差不幸福该怎么办 吸毒犯戒毒所不收怎么办 信用卡到期人进拘留所怎么办? 人在拘留所信用卡逾期怎么办 探视权不让接走怎么办 医保过了缴费期怎么办