题解 UVA11865 【Stream My Contest】
最小树形图(朱刘算法)\(+\) 二分答案。
由题意得,我们要在一些有向边中选出一些边,使\(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】的更多相关文章
- UVA-11865 Stream My Contest (朱-刘 算法+二分)
题目大意:有一张n个顶点,m条边的有向图,根节点为0.每条边有两个权值,一个是费用c,一个是长度b.问在总费用不超过cost的情况下选出若干条边,使得n个点连通时的边的最短长度的最大值是多少. 题目分 ...
- 【UVA 11865】 Stream My Contest (二分+MDST最小树形图)
[题意] 你需要花费不超过cost元来搭建一个比赛网络.网络中有n台机器,编号0~n-1,其中机器0为服务器,其他机器为客户机.一共有m条可以使用的网线,其中第i条网线的发送端是机器ui,接收端是机器 ...
- 题解——ATCoder AtCoder Grand Contest 017 B - Moderate Differences(数学,构造)
题面 B - Moderate Differences Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Stat ...
- UVA 11865 Stream My Contest 组网 (朱刘算法,有向生成树,树形图)
题意: 给n个点编号为0~n-1,0号点为根,给m条边(含自环,重边),每条边有个代价,也有带宽.给定c,问代价不超过c,树形图的最小带宽的最大值能达到多少? 思路: 点数才60,而带宽范围也不大,可 ...
- UVA 11865 Stream My Contest(最小树形图)
题意:N台机器,M条有向边,总资金C,现要到搭建一个以0号机(服务器)为跟的网路,已知每条网线可以把数据从u传递到v,其带宽为d,花费为c,且d越大,传输速度越快,问能够搭建的传输速度最快的网络d值是 ...
- uvalive 11865 Stream My Contest
题意: 有一个网络中心,和许多个城市,网络中心以及城市之间有若干条边,这些边有两个属性,最大带宽和修建费用. 现在要用最多不超过C的费用修建网络,使得每个城市都有网络连接,最大化最小带宽. 带宽限制是 ...
- UVA 11865 Stream My Contest (二分+最小树形图)
题意:给定一个网络,一个服务器,其他的是客户机,有 m 条连线,每条有一个带宽和花费(单向边),让你用不超过 c 的花费,使得 0 到 所有的机器都能到达,并且使得最小带宽最大. 析:很明显是二分题, ...
- Stream My Contest UVA - 11865(带权最小树形图+二分最小值最大化)
#include <iostream> #include <cstdio> #include <sstream> #include <cstring> ...
- AtCoder Beginner Contest 177 题解
AtCoder Beginner Contest 177 题解 目录 AtCoder Beginner Contest 177 题解 A - Don't be late B - Substring C ...
随机推荐
- Spring系列.事务管理原理简析
Spring的事务管理功能能让我们非常简单地进行事务管理.只需要进行简单的两步配置即可: step1:开启事务管理功能 @Configuration //@EnableTransactionManag ...
- Wireshark论证TCP3次握手的过程
wireshark过滤条件:ip.addr == 120.79.36.180 千万别写成 ip.dst == 120.79.36.180 ,这样子就看不到服务器给我们返回的包了 此时,在浏览器输入12 ...
- appium安装的permission deny处理方法-20200204
npm -v 报错:Error: EPERM: operation not permitted, mkdir 'C:\soft\nodejs' 起因:原本安装node在C盘soft文件夹下,按node ...
- Spring IoC 自定义标签解析
前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 本篇文章主要介绍 Spring IoC 容 ...
- Vue基础篇 (1) —— Vue-Router的使用
Vue-Cli中Vue-Router的使用 一.创建vue-cli的项目 npm create myproject vue create 为vue.js 3.0构建项目的命令,2.0版本可以通过vue ...
- 00【笔记】 Shiro登陆过滤提示信息
Shiro登陆过滤 提示信息 package top.yangbuyi.system.shiro; import com.alibaba.fastjson.JSONObject; import org ...
- Excel帮助类
Excel帮助类操作 public class ExcelHelper { /// <summary> /// 将xls导入List /// </summary> /// &l ...
- python用类的方式创建线程---自创建类
用类的方式创建线程---自创建类 import threadingimport time class MyThread(threading.Thread):#自建MyThread类继承threadin ...
- post发送请求参数注意的问题
- python unittest自动测试框架
编写函数或者类时进行测试,确保代码正常工作 python unittest 模块提供了代码测试工具.按照定义测试包括两部分:管理测试依赖库的代码(称为‘固件’)和测试本身. 单元测试用于核实函数的某 ...