EOJ3247:铁路修复计划
传送门
题意
分析
这题用二分做就好啦,有点卡常数,改了几下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:铁路修复计划的更多相关文章
- G. 铁路修复计划 最小生成树
G. 铁路修复计划 二分答案,改变边的权值,找最小生成树即可. 类似的思想还可以用在单度限制最小生成树和最优比例生成树上. #include<iostream> #include<c ...
- ECNU 3247 - 铁路修复计划
Time limit per test: 2.0 seconds Time limit all tests: 15.0 seconds Memory limit: 256 megabytes 在 A ...
- EOJ 3247 铁路修复计划
二分,最小生成树. 二分一下$k$,然后每次算最小生成树验证即可,事实证明,$cmp$函数,参数用引用还是能提高效率的,不引用一直$TLE$,时限有点卡常. 然后错误的代码好像$AC$了啊,$L$和$ ...
- 【声明】前方不设坑位,不收费!~ 我为NET狂官方学习计划
发个通知,过段时间学习计划相关的东西就出来了,上次写了篇指引文章后有些好奇心颇重的人跟我说:“发现最近群知识库和技能库更新的频率有点大,这是要放大招的节奏啊!” 很多想学习却不知道如何规划的人想要一个 ...
- SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)
前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ...
- ORACLE从共享池删除指定SQL的执行计划
Oracle 11g在DBMS_SHARED_POOL包中引入了一个名为PURGE的新存储过程,用于从对象库缓存中刷新特定对象,例如游标,包,序列,触发器等.也就是说可以删除.清理特定SQL的执行计划 ...
- 解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器
企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件 ...
- MSSQLSERVER执行计划详解
序言 本篇主要目的有二: 1.看懂t-sql的执行计划,明白执行计划中的一些常识. 2.能够分析执行计划,找到优化sql性能的思路或方案. 如果你对sql查询优化的理解或常识不是很深入,那么推荐几骗博 ...
- SQL Server-聚焦使用索引和查询执行计划(五)
前言 上一篇我们讲了聚集索引对非聚集索引的影响,对数据库一直在强调的性能优化,所以这一节我们统筹讲讲利用索引来看看查询执行计划是怎样的,简短的内容,深入的理解,Always to review the ...
随机推荐
- Android实现SQLite数据库的增、删、改、查的操作
核心代码DAO类 package com.examp.use_SQLite.dao; import java.util.ArrayList; import java.util.List; import ...
- ProFTPD配置匿名登录与文件夹訪问权限控制
对ProFTPDserver配置匿名登录. 查看配置文件proftpd.conf.默认情况下配置文件里的.匿名登录配置User和Group均为ftp. 查看/etc/passwd确认用 ...
- scrollReveal 使用
传统的layzload只能适用于图片懒加载,而我们现在需要的是全部元素的懒加载! 官网:https://scrollrevealjs.org/ gitHub:https://github.com/jl ...
- ``Accordian'' Patience
``Accordian'' Patience You are to simulate the playing of games of ``Accordian'' patience, the rule ...
- java栈、堆
一.栈.堆 几个小概念 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的 ...
- 关于数组类型的json解析方法
遇到了非常奇葩的数组类型的json,一时解析不出来,用jsonObject会直接报错. Json数据如: [{"id":"1000142","name ...
- 基于PHP函数的alert弹框
可以设置弹出信息,跳转地址,跳转的时间,跳转的信息标题提示: 手机端加上<meta name='viewport' content='width=device-width, initial-sc ...
- Mac OS安装Scrapy
个人觉得掌握简单的爬虫知识非常有用,特别是想要从一些特定网站自动地下载一些资源或者统计一些数据,非常的有用.对于产品经理来说,如果要了解竞争产品.替代产品的价格,可以写一个爬虫脚本从各大电商网站爬取相 ...
- A nonrecursive list compacting algorithm
A nonrecursive list compacting algorithm Each Erlang process has its own stack and heap which are al ...
- enumerated types
控制台手动输入. package enums; import java.util.Scanner; public class EnumTest { public static void main(St ...