地震
题目描述

一场地震毁了 Farmer John 的整个农场。他是个有恒心的人,决定重建农场。在重建了所有 n(1<=n<=400)块田野后,他意识到还得修路将它们连起来。完工后,任两个田野间必须有路。研究了地形后, FJ 认为 m(1<=m<=10000)条双向的道路可能建造。由于资金短缺,他希望已尽可能省钱的方式完成整个工程。幸运的是,奶牛们已经成立了针对地震后修建农场道路的工程顾问公司。奶牛们也很有经济头脑,对没有漂亮利润的工作从不感兴趣。奶牛们关心可能的利益。他们已经说定了为修路所获的酬金f(1<=f<=2,000,000,000),并得到一张关于可能的道路、修建每条路的时 间 ( 以 小 时 计 ) ( 1 <=t<=2,000,000,000 ) 以 及 花 费(1<=c<=2000,000,000)的列表。在两块田野间可能有多于一条的道路被列出,所给数据总有可以连通所有田野的修路方案,虽然可能无利可图。

确定奶牛修路最高的盈利率。

输入

♦第一行三个整数 N, M, F。
♦2...M+1 行: 每行四个空格隔开的整数: i, j, c,t 描述两块田夜间的一
条道路。

输出

只包含一个数,保留四位小数,奶牛每个小时可以得到的最大利润,
如果利润非正,输出 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

思路

这道题是二分,即01分数规划(学习笔记)

我们知道修路的价值和代价,我们现在要求每个小时的最高利润

那么问题用数学语言来表达就成了

(借用XZZ博客)

然后我们再变化一下,就变成了求ci+ti*x最小值;

我们把每条边的权值变成这个,然后跑最小生成树,得到最小值,如果f(x)的值大于0,则证明该x是合法的,如果小于0则不合法..

代码

我觉得我可以去si了,改了好久好久都不知道错哪里

#include<cstdio>
#include<algorithm>
using namespace std;
#define rep(a,b,c) for(rg int a=b;a<=c;a++)
#define drep(a,b,c) for(rg int a=b;a>=c;a--)
#define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
#define il inline
#define rg register
#define vd void
#define db long double
typedef long long ll;
il int gi(){
rg int x=;bool flg=;rg char ch=getchar();
while(ch<''||ch>''){if(ch=='-')flg=;ch=getchar();}
while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
return flg?-x:x;
}
const int maxn=,maxm=;
int n,m,f;
struct edge{int a,b,w,t;db v;}e[maxm];
bool operator < (edge a,edge b){return a.v<b.v;}
int fa[maxn];
il int hd(int i){return fa[i]==i?i:hd(fa[i]);}
il bool check(ll mid){
rep(i,,m)e[i].v=mid/3e6*e[i].t+e[i].w;
int x=;
sort(e+,e+m+);rep(i,,n)fa[i]=i;
db k=f+1e-;
rep(i,,n){
while(x<=m&&hd(e[x].a)==hd(e[x].b))++x;
fa[hd(e[x].a)]=hd(e[x].b),k-=e[x].v;
if(k<)return ;
}return ;
}
int main()
{
n=gi(),m=gi(),f=gi();
rep(i,,m)e[i].a=gi(),e[i].b=gi(),e[i].w=gi(),e[i].t=gi();
if(!check(0ll)){puts("0.0000");return ;}
ll mid,l=,r=2e15;
while(l<r){
mid=(l+r)>>;
if(check(mid+))l=mid+;
else r=mid;
}printf("%.4Lf\n",l/(db)3e6);
return ;
}

地震(quake)的更多相关文章

  1. [USACO]地震 (二分答案+最优比率生成树详解)

    题面:[USACO 2001 OPEN]地震 题目描述: 一场地震把约翰家的牧场摧毁了, 坚强的约翰决心重建家园. 约翰已经重建了N个牧场,现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发 ...

  2. 洛谷4951 地震 bzoj1816扑克牌 洛谷3199最小圈 / 01分数规划

    洛谷4951 地震 #include<iostream> #include<cstdio> #include<algorithm> #define go(i,a,b ...

  3. SACS +Petrel 2009地震

    Bentley SACS V8i SS4 05.07.01.01 海洋平台分析Schlumberger Petrel 2009地震解释油藏模拟课程 Trimble Tekla Structural D ...

  4. HDU2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活[多重背包]

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  5. 多重背包问题:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(HDU 2191)(二进制优化)

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU 2191 一道裸的多重背包问题: #include<iostream> #include<algorithm> #i ...

  6. hdu 2191 多重背包 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

    http://acm.hdu.edu.cn/showproblem.php?pid=2191 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...

  7. [MetaHook] Quake OpenGL function

    Quake OpenGL function for MetaHook plugin. Thank hzqst :D QGL.h #ifndef QGL_H #define QGL_H #include ...

  8. BZOJ 1574: [Usaco2009 Jan]地震损坏Damage

    Description 农夫John的农场遭受了一场地震.有一些牛棚遭到了损坏,但幸运地,所有牛棚间的路经都还能使用. FJ的农场有P(1 <= P <= 30,000)个牛棚,编号1.. ...

  9. usaco 地震 && 奶牛观光

    Usaco 地震: Description 一场地震把约翰家的牧场摧毁了,坚强的约翰决心重建家园.约翰已经重建了N个牧场, 现在他希望能修建一些道路把它们连接起来.研究地形之后,约翰发现可供修建的道路 ...

随机推荐

  1. CSP201509-1:数组分段

    引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的“计算机职业资格认证”考试,针对计算机软件开发. ...

  2. argos3-simulator

    如何修改控制器: CVector2: class CVector2 { friend class CRotationMatrix2; friend class CTransformationMatri ...

  3. [Java-Idea]解决idea启动项目报错:Unable to open debugger port(127.0.0.1:53046):java.net.SocketException"socket closed

    命令行窗口,执行命令:netstat -aon|findstr 9030 查找占用端口的进程 taskkill -f -pid 11331

  4. jira+mysql+破解+中文+compose

    1.制作docker-compose.yml 2.安装 $ docker stack deploy -c docker-compose.yml mshk_jira

  5. UVA 11881 Internal Rate of Return(数学+二分)

    In finance, Internal Rate of Return (IRR) is the discount rate of an investment when NPV equals zero ...

  6. java面笔准备

    这套面试题主要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的朋友在笔试时更好地赢得笔试和面试.由于这套面试题涉及的范围很泛,很广,很杂,大家不可能一天两天就看完 ...

  7. PTA循环,函数,数组作业

    PTA循环实验作业 题目一:统计素数并求和 ### 1.PTA提交列表 2.设计思路(+流程图) 先定义变量(包含素数区间,循环次数,除数,素数个数记录和和的记录) 输入范围 一重循环:循环提取自然数 ...

  8. wait_event_interruptible_timeout

    最近一套方案涉及到内核线程之间的同步,用到了函数wait_event_interruptible_timeout函数,大致是这样: A:是一个后台的线程,平常没事就睡觉,有时被唤醒,或者每5分钟醒一次 ...

  9. JQuery事件对象的属性和方法

    这是今天的总结,以后学习自己可以当参考书来读读.Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态.事件通常与函数结合使用,函数不会在事件发生前被执行 ...

  10. WebSocket添加事件监听器(6)

    WebSocket编程遵循异步编程模型;打开socket后,只需要等待事件发生,而不需要主动向服务器轮询,所以需要在WebSocket对象中添加回调函数来监听事件. WebSocket对象有三个事件: ...