蓝桥杯最小生成树
来源:互联网 发布:泰宇数据保全系统 编辑:程序博客网 时间:2024/05/28 15:33
这道题第一遍的时候不知道结点如何处理,后来画了图自己走一遍就发现可以吧边权设为l=2*l+x+y;
#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;struct Node{ int x,y,l;}Edge[100000+5];bool cmp(const Node a,const Node b){ return a.l<b.l;}int pre[10000+5];int find(int x){ if(pre[x]==x) return x; int t=find(pre[x]); pre[x]=t; return t;}int C[10000+5];int main(){ int n,p,minn=9999999; scanf("%d %d",&n,&p); for(int i=1;i<=n;i++) { scanf("%d",&C[i]); minn=min(minn,C[i]); pre[i]=i; } for(int i=1;i<=p;i++) { scanf("%d %d %d",&Edge[i].x,&Edge[i].y,&Edge[i].l); // pre[Edge[i].y]=Edge[i].x; Edge[i].l=2*Edge[i].l+C[Edge[i].x]+C[Edge[i].y]; } /* for(int i=1;i<=n;i++) printf("%d %d\n",pre[i],i); */ sort(Edge+1,Edge+1+p,cmp); int sum=0; for(int i=1;i<=p;i++) { int fx=find(Edge[i].x); int fy=find(Edge[i].y); // printf("%d %d %d %d\n",fx,fy,Edge[i].x,Edge[i].y); if(fy!=fx) { sum+=Edge[i].l; pre[fy]=fx; // printf("%d %d %d\n",sum,Edge[i].x,Edge[i].y); } } printf("%d\n",sum+minn); return 0;}
0 0
- 蓝桥杯最小生成树
- [最小生成树] 蓝桥杯 城市建设
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- 蓝桥杯 安慰奶牛(最小生成树)
- 蓝桥杯 - 安慰奶牛 (最小生成树)
- 蓝桥杯 历届试题 城市建设 最小生成树
- 蓝桥杯 历届试题 城市建设 最小生成树
- 树+最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- Linux利用crontab定时执行shell脚本
- rails 中的迁移Migration
- yum安装软件提示:Public key for xxx.rpm is not installed
- spring常用注解
- win7 64位操作系统中 Oracle 11g + plsql安装教程(图解)
- 蓝桥杯最小生成树
- ##_VA_ARGS__
- C++开源项目
- MySQL获取日期间隔, 为日期增加一个时间间隔
- 利用Fiddler对Android模拟器网络请求抓包
- 【R语言学习笔记】探索ggplot的排列组合:线图(一)
- Spring集成MyBatis 通用Mapper以及 pagehelper分页插件
- linux系统GCC下编译选项-Wall和-Werror的作用
- 运行hello.py出错,提示 File "<stdin>" , line 1