[USACO08OCT]:打井Watering Hole(MST)
2024-09-07 05:36:42
题意:有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 ;
}
最新文章
- JSON in JavaScript Asp.net
- 忘记常访问网站密码怎么办?教你如何查看浏览器已保存的密码,如何简单查看Chome浏览器保存的密码?
- setInterval js
- nyoj814_又见拦截导弹_DP
- SSH框架中 Spring设置定时器 Quartz
- Spring - 初始化spring容器
- emmet中文文档 (转载)
- Linux下java获取CPU、内存、磁盘IO、网络带宽使用率
- CSS HTML链接去掉小手与增添小手
- web前端职业规划
- 使用CURL下载远程文件保存到服务器
- Ext的正则表达式
- 【wenqi】重置Centos 7 Root密码
- FirstOrDefault
- oracle 11g卸载方法
- JDBC 基础概念
- hdu 4333";Revolving Digits";(KMP求字符串最小循环节+拓展KMP)
- Java并发编程(十二)-- 阻塞队列
- Apache beam中的便携式有状态大数据处理
- Java并发编程笔记之 CountDownLatch闭锁的源码分析
热门文章
- 解决chrome浏览器插件开发者模式每次启动要确认弹出框的问题
- “无法从节点xx检索exectask的版本” 原因分析
- 错误: 找不到或无法加载主类 java操作hbase出错
- 初识阿里开源的本地Java进程监控调试工具arthas(阿尔萨斯)
- Endpoint is unreachable and there is no snapshot available for offline browsing
- 深层目录文件复制,C# 递归,录音录像图片文件过多,用于测试程序
- Spark学习(3) SparkSQL
- Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)
- python全栈学习路线
- 学习笔记之Vim