[50Tproject-13]
来源:互联网 发布:知之阅读 pdf 编辑:程序博客网 时间:2024/05/22 09:50
题解:每条边的权值是边权*2+两个点的权值,跑一下最小生成树,因为要选择一个牧场过夜,所以tot还要加上最小的点的权值
#include <iostream>#include <cstdio>#include <algorithm>#include <climits> using namespace std;#define INF INT_MAXconst int M=10005;int n,m,x,y,z,tot=INF;int w[M],f[M],r[M*10];int u[M*10],v[M*10],val[M*10];void init(){ cin>>n>>m; for(int i=1;i<=n;i++) scanf("%d",&w[i]),tot=min(tot,w[i]); for(int i=1;i<=m;i++) { scanf("%d%d%d",&u[i],&v[i],&z); val[i]=(z<<1)+w[u[i]]+w[v[i]]; }}int find(int x){ return f[x]==x?x:f[x]=find(f[x]);}bool cmp(int a,int b){ return val[a]<val[b];}void kruskal(){ for(int i=1;i<=n;i++) f[i]=i; for(int i=1;i<=m;i++) r[i]=i; sort(r+1,r+1+m,cmp); for(int i=1;i<=m;i++) { int e=r[i]; x=find(u[e]),y=find(v[e]); if(x!=y){ tot+=val[e]; f[x]=y; } }}void work(){ kruskal(); printf("%d\n",tot);} int main(){ init(); work(); return 0;}
0 0
- [50Tproject-13]
- [50Tproject-1] 利润
- [50Tproject-5]
- 2011-7-10 13:50:21
- 2011-7-31 13:57:50
- 2011-7-31 13:57:50
- 50道Java习题之13
- CCF-训练50题-NO.13-数码管
- JAVA基础编程50题(13-15题)详解
- 【Android】问题记录2015-11-11 13:50:16
- 格式化时间的 2016.07.14 13:22:50
- JAVA基础编程练习题--50道之13
- 50
- 50
- 50
- 已知数列:1,1,2,3,5,8,13,21,34,..... 求第50个数值?
- Project Ruler 13 给你100个50位数,求它们和的前十位
- 2012-06-13 16:50 Android限定EditText的输入类型为数字或者英文
- 722C - Destroying Array 线段树
- Swift学习记录 -- 7.数组的基本操作
- Why OpenCV is slower than Matlab in matrix related operation,如:特征值分解,奇异值分解
- USB枚举过程
- ubuntu16.04安装最新版本的wine
- [50Tproject-13]
- SocketException类型的未处理异常在System.dll中发生
- Vuroria增强现实平台,Unity工具开发——ImageTarget Package 个性化更换UI菜单
- hibernate3.3.2学习笔记---将一棵树存进数据库
- LeetCode 409. Longest Palindrome 题解(C++)
- python学习之 图片隐写术
- 树莓派3b下如何安装ubuntu
- linux 中的编译指令make 和make clean
- 快速排序(数组和链表)