uva11865 朱刘算法+二分
这题说的需要最多花费cost元来搭建一个比赛网络,网络中有n台机器,编号为0 - n-1其中机器0 为服务器,给了n条线有向的和他们的花费以及带宽 计算,使得n台连接在一起,最大化网络中的最小带宽, 我们二分答案,然后使用朱刘算法 计算最小花费必须<=cost
#include <iostream>
#include <algorithm>
#include <string.h>
#include <vector>
#include <cstdio>
using namespace std;
//出处 http://blog.csdn.net/wsniyufang/article/details/6747406
/*
最小树形图图模版-朱刘算法
模版说明:点标号必须0-(N-1)
必须去除到自身的点(到自身的边的边权赋无限大)
*/
typedef long long LL;
const LL inf=(1LL)<<;
const int maxn =;
struct Node{
int u , v,b;
LL cost;
bool operator < (const Node &rhs)const{
return b<rhs.b;
}
}E[+],to[+];
int pre[maxn],ID[maxn],vis[maxn];
LL In[maxn];
LL Directed_MST(int root,int NV,int NE) {
LL ret = ;
while(true) {
//1.找最小入边
for(int i=;i<NV;i++) In[i] = inf;
for(int i=;i<NE;i++){
int u = E[i].u;
int v = E[i].v;
if(E[i].cost < In[v] && u != v) {
pre[v] = u;
In[v] = E[i].cost;
}
}
for(int i=;i<NV;i++) {
if(i == root) continue;
if(In[i] == inf) return -;//除了跟以外有点没有入边,则根无法到达它
}
//2.找环
int cntnode = ;
memset(ID,-,sizeof(ID));
memset(vis,-,sizeof(vis));
In[root] = ;
for(int i=;i<NV;i++) {//标记每个环
ret += In[i];
int v = i;
while(vis[v] != i && ID[v] == - && v != root) {
vis[v] = i;
v = pre[v];
}
if(v != root && ID[v] == -) {
for(int u = pre[v] ; u != v ; u = pre[u]) {
ID[u] = cntnode;
}
ID[v] = cntnode ++;
}
}
if(cntnode == ) break;//无环
for(int i=;i<NV;i++) if(ID[i] == -) {
ID[i] = cntnode ++;
}
//3.缩点,重新标记
for(int i=;i<NE;i++) {
int v = E[i].v;
E[i].u = ID[E[i].u];
E[i].v = ID[E[i].v];
if(E[i].u != E[i].v) {
E[i].cost -= In[v];
}
}
NV = cntnode;
root = ID[root];
}
return ret;
}
int lowbound(int v, int len){
int ans=-;
int L=,R=len-;
while(L<=R){
int mid=(L+R)>>;
if(to[mid].b>=v){
ans=mid;R=mid-;
}else{
L=mid+;
}
}
return ans;
}
int main()
{
int T;
scanf("%d",&T);
for(int cc=; cc<=T; ++cc){
int n,m;
LL cost;
int R=,L=;
scanf("%d%d%lld",&n,&m,&cost);
for(int i=; i<m; i++){
scanf("%d%d%d%lld",&to[i].u,&to[i].v,&to[i].b,&to[i].cost);
R=max(to[i].b,R);
}
for(int i=; i<m; i++){
E[i]=to[i];
}
LL co= Directed_MST(,n,m);
if(co>cost||co==-){
puts("streaming not possible."); continue;
}
sort(to,to+m);
int ans=-;
while(L<=R){
int mid = (L+R)>>,num=;
int loc = lowbound(mid,m);
for(int i=loc; i<m; i++) E[num++]=to[i];
LL ccc = Directed_MST(,n,num);
if(ccc<=cost && ccc !=- ){
ans = mid; L=mid+;
}else{
R=mid-;
}
}
printf("%d kbps\n",ans);
}
return ;
}
uva11865 朱刘算法+二分的更多相关文章
- 训练指南 UVA- 11865(有向最小生成树 + 朱刘算法 + 二分)
layout: post title: 训练指南 UVA- 11865(有向最小生成树 + 朱刘算法 + 二分) author: "luowentaoaa" catalog: tr ...
- UVA-11865 Stream My Contest (朱-刘 算法+二分)
题目大意:有一张n个顶点,m条边的有向图,根节点为0.每条边有两个权值,一个是费用c,一个是长度b.问在总费用不超过cost的情况下选出若干条边,使得n个点连通时的边的最短长度的最大值是多少. 题目分 ...
- UVA 11865 Stream My Contest 组网 (朱刘算法,有向生成树,树形图)
题意: 给n个点编号为0~n-1,0号点为根,给m条边(含自环,重边),每条边有个代价,也有带宽.给定c,问代价不超过c,树形图的最小带宽的最大值能达到多少? 思路: 点数才60,而带宽范围也不大,可 ...
- 【朱-刘算法】【最小树形图】hdu6141 I am your Father!
题意:给你一张带权有向图,让你求最大树形图.并在此前提下令n号结点父亲的编号最小. 比赛的时候套了个二分,TLE了. 实际上可以给每个边的权值乘1000,对于n号结点的父边,加上(999-父结点编号) ...
- hdu2121 - Ice_cream’s world II(朱刘算法,不固定根)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2121 题目意思大概是要你在一些城市中选一个做首都 , 要求首都都能到其他城市 , 道路花费要最少 , ...
- UVa11183 Teen Girl Squad, 最小树形图,朱刘算法
Teen Girl Squad Input: Standard Input Output: Standard Output You are part of a group of n teenage ...
- 最小树形图——朱刘算法(Edmonds)
定义:一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图. 朱刘算法实现过程: [在选出入边集后(看步骤1),若有向图中不存在有向环,说明该图就是最小树形图] 1,选入 ...
- POJ 3164 Command Network ( 最小树形图 朱刘算法)
题目链接 Description After a long lasting war on words, a war on arms finally breaks out between littlek ...
- UVA-11183 Teen Girl Squad (最小树形图、朱刘算法模板)
题目大意:给一张无向图,求出最小树形图. 题目分析:套朱-刘算法模板就行了... 代码如下: # include<iostream> # include<cstdio> # i ...
随机推荐
- SharePoint 2013部署自定义HttpModule访问SPContext.Current的一个问题
如果文档库post提交文档时,自定义HttpModule正好有代码访问SPContext.Current属性则会导致上传文档失败.
- WCF错误"The maximum message size quota for incoming messages (65536) has been exceeded."
错误原因有三:超过最大接受的传输值 1.webconfig或者 app.config 文件中的binding 节点进行 配置 maxBufferSize="2147483647" ...
- mysql补充(4)数据完整性
数据完整性(Data Integrity)是指数据的精确性(Accuracy) 和可靠性(Reliability).(补充mysql数据完整性和约束) 它是应防止数据库中存在不符合语义规定的数据和防止 ...
- 数据库操作相关(sql语句-php)
文件:db.config.smarty.php 这个文件主要是用于数据库配置 <?php $db = array( 'host'=>'localhost', 'user'=>'roo ...
- yii---模型的创建
在 model/ 路径新建 Test.php 模型 我们类的名称一定要与数据表的名称相同. 继承 yii\db\ActiveRecord 类: 在模型类中 声明 tableName() 指定表名 // ...
- Shell for
for循环一般格式为:for 变量 in 列表do command1 command2 ... commandNdone列表是一组值(数字.字符串等)组成的序列,每个值通过空格分隔.每循环一次,就将列 ...
- easyui---基础组件:panel
加载easyui有两种方式:1种是html方式加载,1种是js加载. 要加载内容非常多时,用js,如果加载的东西比较少,用html就可以了. panel组件:面板 就是头 身展示 ,一个滚动条,几个关 ...
- hdu4513完美队形II manacher
吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要 ...
- HDU 1711 - Number Sequence - [KMP模板题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Time Limit: 10000/5000 MS (Java/Others) Memory L ...
- [No00004F]史上最全Vim快捷键键位图(入门到进阶)vim常用命令总结
在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format.使 ...