layout: post title: 训练指南 UVA- 11865(有向最小生成树 + 朱刘算法 + 二分) author: "luowentaoaa" catalog: true mathjax: true tags: - 最小生成树 - 图论 - 训练指南 Stream My Contest UVA - 11865 二分带宽,然后判断最小生成树是否小于cost值. #include<bits/stdc++.h> using namespace std; typede…
题意: 给n个点编号为0~n-1,0号点为根,给m条边(含自环,重边),每条边有个代价,也有带宽.给定c,问代价不超过c,树形图的最小带宽的最大值能达到多少? 思路: 点数才60,而带宽范围也不大,可以进行二分穷举最小带宽,将小于穷举值的边“禁用”,进行求树形图!只要能求得树形图,说明带宽还能继续往上提. 注:如果只有根,即n=1,那么输出其中最小的一条边的带宽.而求树形图比较简单,用朱刘算法O(n*m),网上有模板. 朱刘算法的精髓在于:缩点就缩得彻底,将原来的图都给改掉了.如果产生了环,那就…
题目大意:有一张n个顶点,m条边的有向图,根节点为0.每条边有两个权值,一个是费用c,一个是长度b.问在总费用不超过cost的情况下选出若干条边,使得n个点连通时的边的最短长度的最大值是多少. 题目分析:如果已知这个最短距离的最大值d,则问题就变成了:用长度不小于d的边能否构成一个总权值不大于cost的最小树形图.因此,二分枚举d,用朱-刘 算法判断即可. 代码如下: # include<iostream> # include<cstdio> # include<vector…
这题说的需要最多花费cost元来搭建一个比赛网络,网络中有n台机器,编号为0 - n-1其中机器0 为服务器,给了n条线有向的和他们的花费以及带宽 计算,使得n台连接在一起,最大化网络中的最小带宽,  我们二分答案,然后使用朱刘算法 计算最小花费必须<=cost #include <iostream> #include <algorithm> #include <string.h> #include <vector> #include <cstd…
题意:N台机器,M条有向边,总资金C,现要到搭建一个以0号机(服务器)为跟的网路,已知每条网线可以把数据从u传递到v,其带宽为d,花费为c,且d越大,传输速度越快,问能够搭建的传输速度最快的网络d值是多少?(即:在C的支持下,网络中d的最小值最大是多少?) 一开始把问题想简单了,以为网线可以随便接,其实是确定了u->v的= = 最小树形图,概念蛮好理解的,要学习的话 理论:http://hi.baidu.com/bin183/item/5d93ef69ceb541176895e682 代码标注的…
题意:给定一个网络,一个服务器,其他的是客户机,有 m 条连线,每条有一个带宽和花费(单向边),让你用不超过 c 的花费,使得 0 到 所有的机器都能到达,并且使得最小带宽最大. 析:很明显是二分题,然后在判断,就是保证从 0 到所有的点都是通路,这就是最小树形图,直接上模板就好. 代码如下; #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <stri…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2121 题目意思大概是要你在一些城市中选一个做首都 , 要求首都都能到其他城市 , 道路花费要最少 , 且道路都是单向的 , 这个时候就要用到最小树形图算法了 , 而且是不固定根. 不定根就是加一个虚根(原本不存在的点) , 可以让这个虚根到每个点的距离大于原本所有点连接的道路花费之和sum , 然后计算出的结果减去sum,如果比sum还大就可以认为通过这个虚拟节点我们连过原图中两个点,即原图是不连通…
Teen Girl Squad  Input: Standard Input Output: Standard Output You are part of a group of n teenage girls armed with cellphones. You have some news you want to tell everyone in the group. The problem is that no two of you are in the same room, and yo…
定义:一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图. 朱刘算法实现过程: [在选出入边集后(看步骤1),若有向图中不存在有向环,说明该图就是最小树形图] 1,选入边集--找到除root点之外,每一个点的所有入边中权值最小的,用数组in[]记录下这个最小权值,用pre[]记录到达该点的前驱:(若图中存在独立点,最小树形图是不存在的,所以在该步骤结束后,要判断一下) 2,找有向环,并用数组id[]记录节点所属环的编号. 3,找到环后,缩点,并更新权值.(感觉和S…
题意: 有一个网络中心,和许多个城市,网络中心以及城市之间有若干条边,这些边有两个属性,最大带宽和修建费用. 现在要用最多不超过C的费用修建网络,使得每个城市都有网络连接,最大化最小带宽. 带宽限制是,一条边可以接受不大于自己最大值的带宽. 边是有向边,unidirectional. 思路: 最大化最小值,那么考虑到用二分,但是这题应该有一个隐藏条件,那就是带宽越大,修建费用越高,这样才满足二分的条件. 然后有向边,就用最小树形图的朱刘算法,复杂度为O(n^3),由于n的规模比较小,所以可以接受…