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 ...
随机推荐
- adviser vs mentor
研究生或博士生提到自己导师的时候是说adviser呢?还是mentor呢? 至少我认识一个Berkeley的博士是说adviser的. 另外,我的导师也是说adviser. 那还是说adviser吧- ...
- Docker logs 命令
[root@docker01 ~]# docker logs --help Usage: docker logs [OPTIONS] CONTAINER Fetch the logs of a con ...
- thinkphp与php共享session
在其他php页面添加如下代码即可 if (!session_id()) session_start(); 使用时 thinphp 使用 session('test','123'); $user_inf ...
- POJ-2346 Lucky tickets(线性DP)
Lucky tickets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3298 Accepted: 2174 Descrip ...
- HDU 4734 - F(x) - [数位DP][memset优化]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4734 Time Limit: 1000/500 MS (Java/Others) Memory Lim ...
- easyui-combo个人实例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Gym - 101149K Revenge of the Dragon 脑洞题,样例题
http://codeforces.com/gym/101149/problem/K 题意:题目贼长,但其实是个脑筋急转弯... 题解:题目要求某图形面积.该图形只有一个自由度,就是起点与终点距离x. ...
- 《SEO在网页制作中的应用》视频笔记
学习了慕课网<SEO在网页制作中的应用>视频,今天将里面的知识整理一下. 一.SEO介绍 1. 搜索引擎工作原理 搜索引擎现在主流有百度.谷歌.360,他们都有庞大的搜索引擎数据库,每个 ...
- 对爱奇艺PC Web主站来说,良好的SEO能够帮助其获得更多的搜索流量,因而页面上一些非常重要的内容仍然需要依靠服务端进行渲染,由于另外开发一套基于Node的SSR后台成本较高,而乐趣(基于java和velocity模板引擎)平台作为渲染系统已经十分成熟且运行稳定,在充分试验后,我们决定在Uniqy中使用服务端同步与客户端浏览器异步二次渲染相结合的方式,结合Vue2.0提供的 slot插槽机制,很
https://mp.weixin.qq.com/s/eB20BoqzENO_oNk8eDg4Eg 干货|爱奇艺PC Web新框架实践 原创: 前端研发团队 爱奇艺技术产品团队 昨天
- linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转)
linux是如何组成的?答:linux是由用户空间和内核空间组成的为什么要划分用户空间和内核空间?答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的安全性,比如X86 ...