nyoj38
布线问题
- 描述
- 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:
1、把所有的楼都供上电。
2、所用电线花费最少
- 输入
- 第一行是一个整数n表示有n组测试数据。(n<5)
每组测试数据的第一行是两个整数v,e.
v表示学校里楼的总个数(v<=500)
随后的e行里,每行有三个整数a,b,c表示a与b之间如果建铺设线路花费为c(c<=100)。(哪两栋楼间如果没有指明花费,则表示这两栋楼直接连通需要费用太大或者不可能连通)
随后的1行里,有v个整数,其中第i个数表示从第i号楼接线到外界供电设施所需要的费用。( 0<e<v*(v-1)/2 )
(楼的编号从1开始),由于安全问题,只能选择一个楼连接到外界供电设备。
数据保证至少存在一种方案满足要求。 - 输出
- 每组测试数据输出一个正整数,表示铺设满足校长要求的线路的最小花费。
- 样例输入
-
1
4 6
1 2 10
2 3 10
3 1 10
1 4 1
2 4 1
3 4 1
1 3 5 6 - 样例输出
-
4 与一道省赛题目类似,走了弯路,这个要求只能有一个结点与虚拟结点连接,所以先对n个点求出一个MST再找出最小的虚拟节点与这个树的权值,加上这个权值就是答案! 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊笨死了啊
#include<bits/stdc++.h>
using namespace std;
#define N 205005
int u[N],v[N],w[N],r[N];
bool cmp(int i,int j){return w[i]<w[j];}
int n,m;
int f[505];
int getf(int v){return f[v]==v?v:f[v]=getf(f[v]);}
int main()
{
int t,n,m,i,j,k;
int a,b,c;
cin>>t/*=read()*/;
while(t--){
cin>>n>>m;
for(i=0;i<=n;++i) f[i]=i;
for(i=1;i<=m;++i) {r[i]=i;
cin>>u[i]/*=read(),*/>>v[i]/*=read(),*/>>w[i]/*=read()*/;
}
sort(r+1,r+m+1,cmp);
int sumn=0,Count=0;
for(i=1;i<=m&&Count!=n-1;++i){
int e=r[i],x=getf(u[e]),y=getf(v[e]);
if(x!=y){
Count++;
f[y]=x;
sumn+=w[e];
}
}int ans=999999999,x;
for(i=1;i<=n;++i){cin>>x;ans=min(x,ans);}
cout<<sumn+ans<<endl;
}
return 0;
}
nyoj38的更多相关文章
- 最小生成树--->NYOJ-38 布线问题
此题是最基础的最小生成树的题目,有两种方法, 一个是prim一个是kruskal算法,前者利用邻接矩阵,后者是利用边集数组 prim算法的思想是:一个点一个点的找, 先找从第一个点到其他点最小的, 把 ...
- 布线问题 (NYOJ38)
布线问题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:1.把所有 ...
- nyoj38——最小生成树
布线问题 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:1.把所有 ...
随机推荐
- Python3 ChromeDriver与Chrome版本映射表(更新至v2.43)
Python3 ChromeDriver与Chrome版本映射表(更新至v2.43) ChromeDriver下载链接:http://chromedriver.storage.googleapis.c ...
- 解决Linux下jdk版本与安装版本不一致
解决Linux下jdk版本与安装版本不一致 在Linux下安装jdk后,利用java -version查看版本使,发现不是自己所安装的jdk版本; 解决方案: which java ——查看默认的jd ...
- AJAX 与 Python 后台通信
Ajax 简介 Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术. Ajax = 异步 ...
- VC++使用IMAPI调用Outlook邮箱客户端和Foxmail邮箱客户端遇到的问题
http://www.cnblogs.com/abiao/articles/303090.html 发送邮件 MAPISendMail() 发送邮件功能就是对MAPISendMail()的封装.下面解 ...
- map set iterator not incrementable 解决办法
例子: #include <iostream> #include <map> using namespace std; int main() { map<int, int ...
- linux下使用grep在当前目录下搜索所有文件中含有的字符串
grep -r yourstr ./ 举例: grep -r sprintf ./ (在当前目录下递归查找含有字符串sprintf的文件)
- jQuery ajax 添加头部参数跨域
1.添加HTTP文件头 $.ajax({ url: "http://www.baidu.com", //contentType: "text/html; charset= ...
- POJ 1236 Network of Schools(tarjan)题解
题意:一个有向图.第一问:最少给几个点信息能让所有点都收到信息.第二问:最少加几个边能实现在任意点放信息就能传遍所有点 思路:把所有强连通分量缩成一点,然后判断各个点的入度和出度 tarjan算法:问 ...
- Leetcode[1]Two Sum C++
最简单的思想,遍历, 1.两层循环,自己写的,没有用STL,时间花费较长 vector<int> twoSum(vector<int>& nums, int targe ...
- HDU 3549 Flow Problem(最大流模板)
http://acm.hdu.edu.cn/showproblem.php?pid=3549 刚接触网络流,感觉有点难啊,只好先拿几道基础的模板题来练练手. 最大流的模板题. #include< ...