传送门

题意

分析

这题用二分做就好啦,有点卡常数,改了几下for的次数

套了个板子,连最小生成树都忘记了QAQ

trick

代码

    #include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int Maxn=100100;
const double eps = 1e-7;
#define ll long long
int p[Maxn];
int find(int x)
{
return p[x] == x ? x : p[x] = find(p[x]);
}//并查集
struct node
{
int u,v,f;
double w;
bool operator<(const node &p)const
{
return w<p.w;
}
}q[100100];//每条边的情况,u,v是边的端点,w是边的权值
int main()
{
int n,m,x,y;
double sum1,sum2,M;
while (scanf("%d %d %lf",&n,&m,&M)==3)
{
for (int i = 0; i < m; ++i)
{
scanf("%d%d%lf%d",&q[i].u,&q[i].v,&q[i].w,&q[i].f);//不需要考虑重边的情况,因为重边的存在并不覆盖
//之前的边,重边参与排序,选出重边中最小的,就算遍历到了重边中较大的,此时端点已经在同
//一棵树中了,所以重边的存在不会有影响
}
sum1=sum2=0;
int num=0;
double l=1,r=1e10;
for(int i=1;i<=100;++i){
for (int j = 1; j <= n; ++j) p[j] = j;
double mid=(l+r)/2;
sum1=sum2=0;
for(int j=0;j<m;++j) if(q[j].f) q[j].w*=mid;
sort(q,q+m);
for (int j = 0; j < m; ++j)//m条边,从其中选出n-1条边,然后跳出循环
{
x = find(q[j].u);
y = find(q[j].v);
if (x != y)
{
if (x > y)
p[x] = y;
else
p[y] = x;
if(q[j].f) sum1+=q[j].w;else sum2+=q[j].w;
++num;
}
if (num == n-1) break;
}
if(sum1+sum2<M-eps) l=mid;else r=mid;
//printf("%f %f %f\n",sum1,sum2,mid);
for(int j=0;j<m;++j) if(q[j].f) q[j].w/=mid;
}
printf("%f\n",(l+r)/2);
}
return 0;
}

EOJ3247:铁路修复计划的更多相关文章

  1. G. 铁路修复计划 最小生成树

    G. 铁路修复计划 二分答案,改变边的权值,找最小生成树即可. 类似的思想还可以用在单度限制最小生成树和最优比例生成树上. #include<iostream> #include<c ...

  2. ECNU 3247 - 铁路修复计划

    Time limit per test: 2.0 seconds Time limit all tests: 15.0 seconds Memory limit: 256 megabytes 在 A ...

  3. EOJ 3247 铁路修复计划

    二分,最小生成树. 二分一下$k$,然后每次算最小生成树验证即可,事实证明,$cmp$函数,参数用引用还是能提高效率的,不引用一直$TLE$,时限有点卡常. 然后错误的代码好像$AC$了啊,$L$和$ ...

  4. 【声明】前方不设坑位,不收费!~ 我为NET狂官方学习计划

    发个通知,过段时间学习计划相关的东西就出来了,上次写了篇指引文章后有些好奇心颇重的人跟我说:“发现最近群知识库和技能库更新的频率有点大,这是要放大招的节奏啊!” 很多想学习却不知道如何规划的人想要一个 ...

  5. SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)

    前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ...

  6. ORACLE从共享池删除指定SQL的执行计划

    Oracle 11g在DBMS_SHARED_POOL包中引入了一个名为PURGE的新存储过程,用于从对象库缓存中刷新特定对象,例如游标,包,序列,触发器等.也就是说可以删除.清理特定SQL的执行计划 ...

  7. 解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器

    企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件 ...

  8. MSSQLSERVER执行计划详解

    序言 本篇主要目的有二: 1.看懂t-sql的执行计划,明白执行计划中的一些常识. 2.能够分析执行计划,找到优化sql性能的思路或方案. 如果你对sql查询优化的理解或常识不是很深入,那么推荐几骗博 ...

  9. SQL Server-聚焦使用索引和查询执行计划(五)

    前言 上一篇我们讲了聚集索引对非聚集索引的影响,对数据库一直在强调的性能优化,所以这一节我们统筹讲讲利用索引来看看查询执行计划是怎样的,简短的内容,深入的理解,Always to review the ...

随机推荐

  1. [Testing] Config jest to test Javascript Application -- Part 1

    Transpile Modules with Babel in Jest Tests Jest automatically loads and applies our babel configurat ...

  2. 一句话说清楚啥是delegate

    所谓托付就是类对象调用.托付对象代表随意实现该托付的类的对象.

  3. VS2013 update4+Cocos2d-x 3.7 Win8下安装方法及配置

    1.安装VS 2013 update4 7个G.自己就去网上找吧,一大堆,密钥问度娘. 2.安装及配置python 2.x 这里注意,一定要下载python 3.0下面的版本号. 配置:进行环境变量配 ...

  4. java开始到熟悉70-71

    本次内容:file类 package array; /** * file类 */ import java.io.File; import java.io.IOException; public cla ...

  5. 解决查询access数据库含日文出现“内存溢出”问题

    ACCESS有个BUG,那就是在使用 like 搜索时如果遇到日文就会出现“内存溢出”的问题,提示“80040e14/内存溢出”. 会出问题的SQL: where title like '%" ...

  6. 基于bootstrap_博客页面

    <!DOCTYPE html> <!-- saved from url=(0036)http://v3.bootcss.com/examples/blog/ --> <h ...

  7. 二分法和牛顿迭代实现开根号函数:OC的实现

    最近有人贴出BAT的面试题,题目链接. 就是实现系统的开根号的操作,并且要求一定的误差,其实这类题就是两种方法,二分法和牛顿迭代,现在用OC的方法实现如下: 第一:二分法实现 -(double)sqr ...

  8. Spring Batch(4): Job具体解释

    第四章 配置作业Job 4.1 基本配置 Job的配置有3个必须的属性.name,jobRepository,steps.一个简单的Job配置例如以下: <job id="footba ...

  9. hadoop的一般端口使用

  10. 二阶段 三阶段 提交 Paxos

    关于分布式事务.两阶段提交协议.三阶提交协议 - 文章 - 伯乐在线 http://blog.jobbole.com/95632/