最小树形图(朱刘算法)\(+\) 二分答案。

由题意得,我们要在一些有向边中选出一些边,使\(0\)号节点能够到达其他节点,使距离之和\(\leqslant cost\),并且使每条边中的带宽的最小值最大。

为方便起见,我将\(0 \sim n-1\)号节点都\(++\),转为\(1 \sim n\)号节点。

第一个要求用最小树形图来解决,最小值最大用二分答案来解决,在二分时只选出带宽\(\geqslant mid\)的边,用选出的边求最小树形图,判断二分是否合法。

多组数据以及二分答案都涉及多次进行朱刘算法,记得清空。

\(code:\)

#include<bits/stdc++.h>
#define maxn 20010
#define maxc 1000000
#define inf 200000000
using namespace std;
template<typename T> inline void read(T &x)
{
x=0;char c=getchar();bool flag=false;
while(!isdigit(c)){if(c=='-')flag=true;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
if(flag) x=-x;
}
int t,p,q,c,n,m,root,l,r,ans;
struct edge
{
int x,y,v,b;
}e[maxn],ed[maxn];
int id[maxn],pre[maxn],ine[maxn],vis[maxn];
int zhuliu()
{
int tot=0,cnt;
while(1)
{
cnt=0;
for(int i=1;i<=n;++i) ine[i]=inf,id[i]=vis[i]=0;
for(int i=1;i<=m;++i)
{
int x=e[i].x,y=e[i].y,v=e[i].v;
if(x!=y&&v<ine[y]) ine[y]=v,pre[y]=x;
}
for(int i=1;i<=n;++i)
if(i!=root&&ine[i]==inf)
return -1;
for(int i=1;i<=n;++i)
{
if(i==root) continue;
tot+=ine[i];
int y=i;
while(vis[y]!=i&&!id[y]&&y!=root)
{
vis[y]=i;
y=pre[y];
}
if(!id[y]&&y!=root)
{
id[y]=++cnt;
for(int x=pre[y];x!=y;x=pre[x]) id[x]=cnt;
}
}
if(!cnt) break;
for(int i=1;i<=n;++i)
if(!id[i])
id[i]=++cnt;
for(int i=1;i<=m;++i)
{
int x=e[i].x,y=e[i].y;
e[i].x=id[x],e[i].y=id[y];
if(id[x]!=id[y]) e[i].v-=ine[y];
}
root=id[root];
n=cnt;
}
return tot;
}
bool check(int x)
{
root=1,n=p,m=0;
for(int i=1;i<=q;++i)
if(ed[i].b>=x)
e[++m]=ed[i];
int get=zhuliu();
return get!=-1&&get<=c;
}
int main()
{
read(t);
while(t--)
{
read(p),read(q),read(c);
for(int i=1;i<=q;++i)
{
read(ed[i].x),read(ed[i].y),read(ed[i].b),read(ed[i].v);
ed[i].x++,ed[i].y++;
}
l=0,r=maxc,ans=-1;
while(l<=r)
{
int mid=(l+r)>>1;
if(check(mid)) ans=mid,l=mid+1;
else r=mid-1;
}
if(ans==-1) puts("streaming not possible.");
else printf("%d kbps\n",ans);
}
return 0;
}

题解 UVA11865 【Stream My Contest】的更多相关文章

  1. UVA-11865 Stream My Contest (朱-刘 算法+二分)

    题目大意:有一张n个顶点,m条边的有向图,根节点为0.每条边有两个权值,一个是费用c,一个是长度b.问在总费用不超过cost的情况下选出若干条边,使得n个点连通时的边的最短长度的最大值是多少. 题目分 ...

  2. 【UVA 11865】 Stream My Contest (二分+MDST最小树形图)

    [题意] 你需要花费不超过cost元来搭建一个比赛网络.网络中有n台机器,编号0~n-1,其中机器0为服务器,其他机器为客户机.一共有m条可以使用的网线,其中第i条网线的发送端是机器ui,接收端是机器 ...

  3. 题解——ATCoder AtCoder Grand Contest 017 B - Moderate Differences(数学,构造)

    题面 B - Moderate Differences Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Stat ...

  4. UVA 11865 Stream My Contest 组网 (朱刘算法,有向生成树,树形图)

    题意: 给n个点编号为0~n-1,0号点为根,给m条边(含自环,重边),每条边有个代价,也有带宽.给定c,问代价不超过c,树形图的最小带宽的最大值能达到多少? 思路: 点数才60,而带宽范围也不大,可 ...

  5. UVA 11865 Stream My Contest(最小树形图)

    题意:N台机器,M条有向边,总资金C,现要到搭建一个以0号机(服务器)为跟的网路,已知每条网线可以把数据从u传递到v,其带宽为d,花费为c,且d越大,传输速度越快,问能够搭建的传输速度最快的网络d值是 ...

  6. uvalive 11865 Stream My Contest

    题意: 有一个网络中心,和许多个城市,网络中心以及城市之间有若干条边,这些边有两个属性,最大带宽和修建费用. 现在要用最多不超过C的费用修建网络,使得每个城市都有网络连接,最大化最小带宽. 带宽限制是 ...

  7. UVA 11865 Stream My Contest (二分+最小树形图)

    题意:给定一个网络,一个服务器,其他的是客户机,有 m 条连线,每条有一个带宽和花费(单向边),让你用不超过 c 的花费,使得 0 到 所有的机器都能到达,并且使得最小带宽最大. 析:很明显是二分题, ...

  8. Stream My Contest UVA - 11865(带权最小树形图+二分最小值最大化)

    #include <iostream> #include <cstdio> #include <sstream> #include <cstring> ...

  9. AtCoder Beginner Contest 177 题解

    AtCoder Beginner Contest 177 题解 目录 AtCoder Beginner Contest 177 题解 A - Don't be late B - Substring C ...

随机推荐

  1. Java解析apk、ipa图标,包名,应用名称,版本号

    参看:http://blog.csdn.net/moyanxuan_1993_2_24/article/details/53612001

  2. 利用xampp集成环境搭建pikachu靶场及部分问题解决

    xampp的环境部署 1.本地服务器的搭建 首先要到官网下载xampp https://www.apachefriends.org/zh_cn/index.html 有各个不同的系统版本,这里我们选择 ...

  3. webpack的入门实践,看这篇就够了

    webpack的入门实践 我会将所有的读者概括为初学者,即使你可能有基础,学习本节之前我希望你具有一定的JavaScript和node基础 文中的 ... ...代表省略掉部分代码,和上面的代码相同 ...

  4. python R语言 入门常见指令

    环境是windows R语言安装包 install.packages("magrittr")

  5. Nginx使用upstream实现负载均衡

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  6. 注册中心(Eureka/Consul)

    基于SpringBoot1.5.4与SpringCloud(Dalston.SR2)的SpringCloud学习博客,转载请标明出处,O(∩_∩)O谢谢 - Spring Cloud简介 Spring ...

  7. css样式大全,完整的Css样式大全(整理)

    CSS样式被称为为“层叠样式表”,是一种网页制作做不可或缺的技术,是用于装饰网页,达到设计效果的一种样式语言,下面将整理一下css常用样式: 字体属性:(font) 大小 {font-size: x- ...

  8. Ticket Game思维题

    题目链接 题意: 给你一个n的序列(n=2*k),由数字和?(偶数个)组成,A和B分别操作(B先操作):把?变成一个任意的0-9的数字,如果最后前n/2和后n/2个数字之和相等,则A胜,否则B胜. 分 ...

  9. chrome本地调试跨域问题

    1.关闭chrome浏览器(全部) 我们可以通过使用chrome命令行启动参数来改变chrome浏览器的设置,具体的启动参数说明参考这篇介绍.https://code.google.com/p/xia ...

  10. ElasticSearch 定时批量删除N天前的数据

    描述: 之前我已经完成了使用ElasticSearch.kibana.filebeat.三个工具完成分布式集群收集 分布在各个ip地址上的微服务日志,这样就可以统一的在一个服务器上查看了所有的微服务产 ...