题意:有N个牧场,每个牧场修水井花费Wi,连接牧场花费Pij,问最小花费,使得每个牧场要么有水井,要么和有水井的牧场有通道。

思路:加一个格外的节点O,连接O表示修井,边权是修井的费用。     那么这N+1个点求最MST即可。

刘同学想到的解法: 先找到修井费用最低的的牧场,然后和上面一样,由于最低的那个必选,所以异曲同工。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const int maxm=maxn*maxn;
int fa[maxn],t[maxn],a[maxn][maxn],tot;
struct in{
int len,u,v;
}s[maxm];
bool cmp(in w,in q) {
return w.len<q.len;
}
void add(int u,int v,int len){
tot++; s[tot].u=u; s[tot].v=v;
s[tot].len=len;
}
int find(int x){
if(x!=fa[x]) return fa[x]=find(fa[x]);
return x;
}
int main()
{
int N,M,ans=;
scanf("%d",&N);
rep(i,,N) scanf("%d",&t[i]);
rep(i,,N) rep(j,,N) {
scanf("%d",&a[i][j]);
if(a[i][j]) add(i,j,a[i][j]);
}
rep(i,,N) fa[i]=i;
rep(i,,N) add(,i,t[i]);
sort(s+,s+tot+,cmp);
rep(i,,tot) {
int fu=find(s[i].u);
int fv=find(s[i].v);
if(fu==fv) continue;
fa[fu]=fv; ans+=s[i].len;
}
printf("%d\n",ans);
return ;
}

最新文章

  1. JSON in JavaScript Asp.net
  2. 忘记常访问网站密码怎么办?教你如何查看浏览器已保存的密码,如何简单查看Chome浏览器保存的密码?
  3. setInterval js
  4. nyoj814_又见拦截导弹_DP
  5. SSH框架中 Spring设置定时器 Quartz
  6. Spring - 初始化spring容器
  7. emmet中文文档 (转载)
  8. Linux下java获取CPU、内存、磁盘IO、网络带宽使用率
  9. CSS HTML链接去掉小手与增添小手
  10. web前端职业规划
  11. 使用CURL下载远程文件保存到服务器
  12. Ext的正则表达式
  13. 【wenqi】重置Centos 7 Root密码
  14. FirstOrDefault
  15. oracle 11g卸载方法
  16. JDBC 基础概念
  17. hdu 4333&quot;Revolving Digits&quot;(KMP求字符串最小循环节+拓展KMP)
  18. Java并发编程(十二)-- 阻塞队列
  19. Apache beam中的便携式有状态大数据处理
  20. Java并发编程笔记之 CountDownLatch闭锁的源码分析

热门文章

  1. 解决chrome浏览器插件开发者模式每次启动要确认弹出框的问题
  2. “无法从节点xx检索exectask的版本” 原因分析
  3. 错误: 找不到或无法加载主类 java操作hbase出错
  4. 初识阿里开源的本地Java进程监控调试工具arthas(阿尔萨斯)
  5. Endpoint is unreachable and there is no snapshot available for offline browsing
  6. 深层目录文件复制,C# 递归,录音录像图片文件过多,用于测试程序
  7. Spark学习(3) SparkSQL
  8. Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)
  9. python全栈学习路线
  10. 学习笔记之Vim