【题解】\(quake\)

题目大意

我们共有报酬\(f\)元,一条边有它的价值\(w_i\),有它的建造时间\(t_i\)。要求建一些边,生成一颗树。求最大的利润率。

数据范围

\(n\le 400\) \(m\le10000\)

\(Solution\)

实际上\(n,m\)出到\(\le 100000\)应该也是没问题的。

分数形式?考虑数学表示一下

\(\frac{f-\Sigma c_i}{\Sigma t_i}\le ans\)

\(f-\Sigma c_i\le ans\Sigma t_i\)

\(\Sigma(ans\times t_i + c_i) \le f\)

二分就完事了,然后直接克鲁斯卡尔。

#include<bits/stdc++.h>

#define RP(t,a,b) for(register int (t)=(a),edd_=(b);t<=edd_;++t)
#define DRP(t,a,b) for(register int (t)=(a),edd_=(b);t>=edd_;--t)
#define ERP(t,a) for(int t=head[a];t;t=e[t].nx)
#define pushup(x) seg[(x)]=seg[(x)<<1]+seg[(x)<<1|1]
#define midd register int mid=(l+r)>>1
#define TMP template<class ccf>
#define rgt L,R,mid,r,pos<<1|1
#define lef L,R,l,mid,pos<<1
#define all 1,n,1 using namespace std;typedef long long ll;typedef long double db;
TMP inline ccf Max(ccf a,ccf b){return a<b?b:a;}
TMP inline ccf Min(ccf a,ccf b){return a<b?a:b;}
TMP inline ccf Abs(ccf a){return a<0?-a:a;}
TMP inline ccf qr(ccf k){
char c=getchar();ccf x=0;int q=1;
while(c<48||c>57)q=c==45?-1:q,c=getchar();
while(c>=48&&c<=57)x=x*10+c-48,c=getchar();
return q==-1?-x:x;
}
//-------------template&IO---------------------
const int maxn=405;
int r[maxn];
int head[maxn];
int cnt;
int n,m;
long double F;
long double mid;
const long double EPS=1e-10; struct S{
int fr,to;long double w,t;
inline void mk(int FR,int TO,int W,int T){fr=FR;to=TO;w=W;t=T;}
inline bool operator <(S a){
return t*mid+w<a.t*mid+a.w;
}
}data[10001]; inline void add(int fr,int to,int w,int t){
data[++cnt].mk(fr,to,w,t);
} inline int q(int x){
register int t=x,temp,i=x;
while(r[t]!=t) t=r[t];
while(r[i]!=i){temp=r[i];r[i]=t;i=temp;}
return t;
} inline void j(int x,int y){r[q(x)]=q(y);}
inline bool in(int x,int y){return q(x)==q(y);} inline bool chek(){
RP(t,1,n) r[t]=t;
sort(data+1,data+m+1);
long double ret=0;
RP(p,1,m)
if(!in(data[p].fr,data[p].to))
ret+=data[p].t*mid+data[p].w,j(data[p].fr,data[p].to);
return ret<=F+EPS||ret+EPS<=F;
} int t1,t2,t3,t4;
int main(){
#ifndef ONLINE_JUDGE
freopen("quake.in","r",stdin);
freopen("quake.out","w",stdout);
#endif n=qr(1);m=qr(1);F=qr(1); RP(t,1,m){
t1=qr(1);
t2=qr(1);
t3=qr(1);
t4=qr(1);
add(t1,t2,t3,t4);
}
long double l=0,r=2000000001;
mid=0;
if(!chek()){
puts("0.0000\n");
return 0;
}
do{
mid=(l+r)/(db)2;
if(chek())
l=mid;
else
r=mid;
}while(l+EPS<r);
printf("%.4Lf",l);
return 0; } /*
分数形式?考虑数学表示一下 ### $\frac{f-\Sigma c_i}{\Sigma t_i}\le ans$ ### $f-\Sigma c_i\le ans\Sigma t_i$ ### $\Sigma(ans\times t_i + c_i) \le f$ 二分就完事了 */

【题解】quake的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. luogu P2043 质因子分解

    题目描述 对N!进行质因子分解. 输入输出格式 输入格式: 输入数据仅有一行包含一个正整数N,N<=10000. 输出格式: 输出数据包含若干行,每行两个正整数p,a,中间用一个空格隔开.表示N ...

  2. Springboot如何优雅的解决ajax+自定义headers的跨域请求

    1.什么是跨域 由于浏览器同源策略(同源策略,它是由Netscape提出的一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略.所谓同源是指,域名,协议,端口相同.),凡是发 ...

  3. 书写一个程序,把变量n的初始值设置为1957,然后利用除法运算和取余运算把变量n的每一位数字都抽出来并打印

    class number { void num(){ int a,b,c,d; int n=1957; a=n/1000; b=n/100%10; c=n/10%10; d=n%10; System. ...

  4. 2016集训测试赛(十九)Problem A: 24点大师

    Solution 这到题目有意思. 首先题目描述给我们提供了一种非常管用的模型. 按照题目的方法, 我们可以轻松用暴力解决20+的问题; 关键在于如何构造更大的情况: 我们发现 \[ [(n + n) ...

  5. ZFS -世界上最高级的文件系统之一

    https://www.oschina.net/news/44302/openzfs_launch_announcement https://en.wikipedia.org/wiki/ZFS ZFS ...

  6. [转] makeFile文件作用

    源文件地址 makefile关系到了整个工程的编译规则.一个工程中的源文件不计数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后 ...

  7. QQ聊天窗口上的广告与QQ弹窗广告的完美屏蔽去除

    涉及的软件 1. QQ  (笔者的为v8.2版本) 2. Win7 3. ADSafe(3.13.308.9900正式版) 前言 QQ广告十分讨人厌,除了QQ弹窗的广告,让人十分反感外,最近发现QQ聊 ...

  8. linux中判断符号[]注意事项

    1.中括号[]内的每个组件都需要有空格键来分割: 2.在中括号内的变量,最好都一双引号括号起来: 3.在中括号内的常量,最好都以单引号或双引号括号起来.

  9. 动态PPT制作

    今天开通的博客,希望以后能够和大家一起分享学习心得.今天也是第一次学习制作动态PPT. 如果想要做成flash那种效果,建议学习下<动画传奇>这本书. 做成flash效果,需要用到动画中的 ...

  10. Apache上部署Django

    0. 部署环境 Ubuntu 14.04 on AliYun Apache 2.4.7 Python 3 [2.7升级3请看http://www.cnblogs.com/manhua/p/423504 ...