【Earthquake, 2001 Open 】 0-1 分数规划
71 奶牛施工队
一场地震把约翰家园摧毁了,坚强的约翰决心重建家园。约翰已经修复了 N 个牧场,他需要再
修复一些道路把它们连接起来。碰巧的是,奶牛们最近也成立了一个工程队,专门从事道路修复。而
然,奶牛们很有经济头脑,如果无利可图,它们是不会干的。
约翰和奶牛达成了协议,约翰向奶牛支付 F 元,奶牛负责修路,但不必修复所有道路,只要确保
所有牧场连通即可。可供奶牛选择修复的道路有 M 条,第 i 条道路连接第 Ui 个牧场和第 Vi 个牧场,
修复需要 Ti 分钟,支出成本为 Ci。保证连通所有牧场的道路修复方案总是存在的。奶牛们关注的是
挣钱速度,即总利润和总施工时间的比值。请帮助奶牛们选择修复哪些道路,才能使它们在单位时间
里的利润最大?
输入格式
• 第一行:三个整数 N, M 和 F, 1 ≤ N ≤ 400 , 1 ≤ M ≤ 10000 , 1 ≤ F ≤ 2 × 109
• 第二行到第 M + 1 行:第 i + 1 行有四个整数 Ui, Vi, Ci 和 Ti, 1 ≤ Ui,Vi ≤ N, 1 ≤ Ci,Ti ≤
2 × 109
输出格式
• 单个浮点数:表示施工队的最大挣钱速度,以四舍五入的方法保留四位小数,如果这个项目一
定亏本,输出 0.0000
样例输入
5 5 100
1 2 20 5
1 3 20 5
1 4 20 5
1 5 20 5
2 3 23 1
样例输出
1.0625
解释
修最后四条道路,成本总和为 83,时间总和
为 16,所以单位时间的利润为 (100 − 83)/16 =
1. 0625
【分析】
因为又是一题0-1分数规划,就再写一下。。
其实就是个二分?
二分答案mid,即要求[F-sigma(Ci) ]/sigma(Ti)>=mid
就是F>=sigma(Ci+mid*Ti)
右边尽量小就更有可能成立,就用最小1生成树krustal。
嗯
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
#define Maxn 410
#define Maxm 10010 struct node
{
int x,y,a,b;
double c;
}t[Maxm*]; int fa[Maxn],n,m;
double f; bool cmp(node x,node y) {return x.c<y.c;} int ffa(int x)
{
if(fa[x]!=x) return ffa(fa[x]);
return fa[x];
} bool check(double x)
{
for(int i=;i<=m;i++) t[i].c=t[i].a+x*t[i].b;
sort(t+,t++m,cmp);
double sum=;int cnt=;
for(int i=;i<=n;i++) fa[i]=i;
for(int i=;i<=m;i++)
{
if(ffa(t[i].x)!=ffa(t[i].y))
{
fa[ffa(t[i].x)]=ffa(t[i].y);
cnt++;
sum+=t[i].c;
}
if(cnt==n-) break;
}
return (cnt==n-)&&(f>=sum);
} void ffind(double l,double r)
{
while(r-l>0.000001)
{
double mid=(l+r)/;
if(check(mid)) l=mid;
else r=mid;
}
printf("%.4lf\n",l);
} int main()
{
double sm=;
scanf("%d%d%lf",&n,&m,&f);
for(int i=;i<=m;i++)
{
scanf("%d%d%d%d",&t[i].x,&t[i].y,&t[i].a,&t[i].b);
sm+=t[i].a;
}
ffind(,sm);
return ;
}
OwO
2016-10-31 20:09:07
【Earthquake, 2001 Open 】 0-1 分数规划的更多相关文章
- poj 2976 Dropping tests 0/1分数规划
0/1分数规划问题,用二分解决!! 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> # ...
- bzoj 3597: [Scoi2014]方伯伯运椰子 0/1分数规划
3597: [Scoi2014]方伯伯运椰子 Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 144 Solved: 78[Submit][Status ...
- LOJ 3089 「BJOI2019」奥术神杖——AC自动机DP+0/1分数规划
题目:https://loj.ac/problem/3089 没想到把根号之类的求对数变成算数平均值.写了个只能得15分的暴力. #include<cstdio> #include< ...
- poj2728 Desert King【最优比率生成树】【Prim】【0/1分数规划】
含[最小生成树Prim]模板. Prim复杂度为$O(n^2),适用于稠密图,特别是完全图的最小生成树的求解. Desert King Time Limit: 3000MS Memory Li ...
- POJ - 2976 Dropping tests && 0/1 分数规划
POJ - 2976 Dropping tests 你有 \(n\) 次考试成绩, 定义考试平均成绩为 \[\frac{\sum_{i = 1}^{n} a_{i}}{\sum_{i = 1}^{n} ...
- [SDOI2017]新生舞会 0/1分数规划
---题面--- 题解: 0/1分数规划,,,但是竟然有诡异的精度问题???因为这个被卡了好久 中途还写过一次KM,,,结果陷入死循环,,,我大概是写了一个假KM,,,于是放弃KM,回来调费用流 这个 ...
- bzoj3232圈地游戏——0/1分数规划+差分建模+判环
Description DZY家的后院有一块地,由N行M列的方格组成,格子内种的菜有一定的价值,并且每一条单位长度的格线有一定的费用. DZY喜欢在地里散步.他总是从任意一个格点出发,沿着格线行走直到 ...
- Bzoj1486/洛谷P3199 最小圈(0/1分数规划+spfa)/(动态规划+结论)
题面 Bzoj 洛谷 题解(0/1分数规划+spfa) 考虑\(0/1\)分数规划,设当前枚举到的答案为\(ans\) 则我们要使(其中\(\forall b_i=1\)) \[ \frac{\sum ...
- Bzoj4753/洛谷P4432 [JSOI2016]最佳团体(0/1分数规划+树形DP)
题面 Bzoj 洛谷 题解 这种求比值最大就是\(0/1\)分数规划的一般模型. 这里用二分法来求解最大比值,接着考虑如何\(check\),这里很明显可以想到用树形背包\(check\),但是时间复 ...
随机推荐
- C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项
1.为什么需要扩展方法 .NET3.5给我们提供了扩展方法的概念,它的功能是在不修改要添加类型的原有结构时,允许你为类或结构添加新方法. 思考:那么究竟为什么需要扩展方法呢,为什么不直接修改原有类型呢 ...
- web开发第一周
第一天:HTML基础内容. 超文本标记语言,Hyper Text Makeup Language. 列表(清单),表格,框架,和表单,四个方法还不是很熟练. 列表,list,分OL和UL,表格的每个单 ...
- php导出execl
<?php function export_excel($items,$fields,$fields_array,$name) { /* * 调用方法示例 * $items = $this-&g ...
- ios Toll-Free Bridging
有一些数据类型是能够在 Core Foundation Framework 和 Foundation Framework 之间交换使用的.这意味着,对于同一个数据类型,你既可以将其作为参数传入 Cor ...
- C#&JQ仿网上商城商品条件筛选功能
1.后台绑定: 一种案例: 根据第一级显示第二级,并带有每个二级的“全部”功能: #region 绑定区域 #region 绑定一级区域 ) <= ? : (PageIndex - )) + , ...
- Swift 一些环境配置
#if DEBUG 使用 如下图配置即可使用
- DAG模型——硬币问题
硬币问题 有n种硬币,面值分别为V1,V2,...,Vn,每种都有无限多.给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值.1<=n<=100, 0& ...
- Codevs 3729 飞扬的小鸟
飞扬的小鸟 标签 动态规划 NOIp提高组 2014 难度 提高+/省选- 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小 ...
- OpenCV学习(1)-安装(Windows)
下载安装 在这里下载.我下载了2.4.9的Windows版本.双击安装即可. 配置环境变量 配置环境变量的目的是为了让系统找到OpenCV的动态链接库.因此需要把动态链接库添加到系统环境变量PATH中 ...
- Centos系统安装
Centos系统安装 安装系统前的注意事项 1) 硬件CPU必须支持虚拟化技术,在支持虚拟化的前提下我们还要去把虚拟 的功能打开否则在安装的时候会报错,开启虚拟化需要在BIOS中开启 2)创建虚拟机的 ...