题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1416 Zaphod Beeblebrox — President of the Imperial Galactic Government. And by chance he is an owner of enterprises that trade in secondhand pens. This is a complicated highly protable and highly comp…
题意:求一幅无向图的最小生成树与最小生成树,不存在输出-1 解法:用Kruskal求最小生成树,标记用过的边.求次小生成树时,依次枚举用过的边,将其去除后再求最小生成树,得出所有情况下的最小的生成树就是次小的生成树.可以证明:最小生成树与次小生成树之间仅有一条边不同.不过这样复杂度有点高,可达O(m^2). 求次小生成树有O(mlogm+n^2)的算法,详见 代码: #include <iostream> #include <cstdio> #include <cstring…
layout: post title: 训练指南 UVALive - 5713(最小生成树 + 次小生成树) author: "luowentaoaa" catalog: true mathjax: true tags: - 最小生成树 - 图论 - 训练指南 Qin Shi Huang's National Road System UVALive - 5713 题意 有n个城市,要修一些路使得任意两个城市都能连通.但是有人答应可以不计成本的帮你修一条路,为了使成本最低,你要慎重选择修…
Description Zaphod Beeblebrox - President of the Imperial Galactic Government. And by chance he is an owner of enterprises that trade in secondhand pens. This is a complicated highly protable and highly competitive business. If you want to stay a lea…
题意就是求最小生成树和次小生成树 #include<cstdio> #include<iostream> #include<algorithm> #include<cmath> #include<cstring> #include<string> #define cl(a,b) memset(a,b,sizeof(a)) #define debug(x) cerr<<#x<<"=="<…
The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22668   Accepted: 8038 Description Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spanning Tree): Consider a connected, undire…
对于一个边上具有权值的图来说,其边权值和最小的生成树叫做图G的最小生成树 求无向图最小生成树主要有prim和kruskal两种算法 1.prim 将点集V分成Va和Vb两部分,Va为已经连入生成树的点,Vb为没有连入的点,按照边的大小逐渐向Va中加点,直到Va中包含所有点,具体步骤,复杂度O(mlogn) ⑴.首先初始化生成树的权值为0,任选一点放入Va,其余点放入Vb ⑵.在Vb中找一点u,在Va中找一点v(其实v一直不变),使得uv间距离最短,并更新u所连边,这也就是为什么v不变的原因 ⑶.…
Kruskal模板:按照边权排序,开始从最小边生成树 #include<algorithm> #include<stdio.h> #include<string.h> #include<iostream> #define N 1000+5//n 个顶点,m条边 using namespace std; //最小生成树模板(计算最小生成树的sum) struct node { int u,v,len;//u->v距离len }q[N]; int f[N]…
题目链接:传送门 题意: 有n坐城市,知道每坐城市的坐标和人口.如今要在全部城市之间修路,保证每一个城市都能相连,而且保证A/B 最大.全部路径的花费和最小,A是某条路i两端城市人口的和,B表示除路i以外全部路的花费的和(路径i的花费为0). 分析: 先求一棵最小生成树,然后枚举每一条最小生成树上的边,删掉后变成两个生成树.然后找两个集合中点权最大的两 个连接起来.这两个点中必定有权值最大的那个点.所以直接从权值最大的点開始dfs. 为了使A/B的值最大,则A尽可能大,B尽可能小.所以B中的边一…
链接: http://poj.org/problem?id=1679 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82831#problem/K Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24594   Accepted: 8751 Description Given a connected undirected graph, tell if its m…