题目描述

或许会传送失败的传送门

#分析

考虑如何才能让白边显得更(不)重要,即在每条白边上(加上)减去一个值。

我们可以二分这个值,然后用寻常方法做最小生成树。统计在此最小生成树里有多少白 边。

然后我们就可以找到一个合适的值,带这个权做一次最小生成树。

在计算答案的时候把这些值补偿回去就做完了。

以上来自某标答

关于各种调试时的槽点

1.二分卡死的情况,什么l==r然后死循

2.sum必须在外面减去增加的值(这可真是个未解之谜)(为什么不可以边做边补偿?边做边补偿只有40分。。。)

3.你以为我写的是前向星吗。。。你可看到了head数组?对,就是没用了。kruskal表示我用不上那东西

关于考试

还有40分钟

emm先20分钟来个Kruskal的小板,一看就和最小生成树有关(题干)

然后?然后就瓜不瓜?瓜哉瓜哉,瓜了10分钟

然后又开始了玄学贪心,先把最小的k条白边加进去骗分

骗了10分

以下正解

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,k,sum,cnt=0,x[1000010],y[1000001],z[1000001],c[1000001],fa[1000001];
struct node{
int u,v,w,c;
}e[2000001];
bool comp(node p,node q){
if(p.w==q.w)return p.c<q.c;
return p.w<q.w;
}
int getfa(int x){
if(fa[x]!=x)
fa[x]=getfa(fa[x]);
return fa[x];
}
void add(int x,int y,int z,int c){
e[++cnt].u=x;e[cnt].v=y;e[cnt].w=z;e[cnt].c=c;
}
bool Kruskal(int mid){
int tot=0,ans=0;
sum=0;
for(int i=0;i<=n;i++)fa[i]=i;
for(int i=1;i<=m;i++){
add(x[i],y[i],z[i],c[i]);
if(c[i]==0)
e[cnt].w+=mid;
}
sort(e+1,e+m+1,comp);
for(int i=1;i<=m;++i){
int p=getfa(e[i].u),q=getfa(e[i].v);
if(p!=q){
fa[p]=q;
tot++;
sum+=e[i].w;
if(e[i].c==0)ans++;
}
if(tot>=n-1)
break;
}
cnt=0;
if(ans>=k)return true;
else return false;
}
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=m;i++)
scanf("%d%d%d%d",&x[i],&y[i],&z[i],&c[i]);
int l=-100,r=100;
while(l<r){
int mid=(l+r+1)/2;
if(Kruskal(mid))l=mid;
else r=mid-1;
}
Kruskal(l);
printf("%d",sum-k*l);
return 0;
}

【20180807模拟测试】tree的更多相关文章

  1. 【20180807模拟测试】T2 box

    [问题描述] 有个桌子长 R 宽 C,被分为 R*C 个小方格.其中,一些方格上有箱子,一些方格上有按 钮,一些方格上有障碍物,一些方格上是空地.现在有个任务,需要把所有箱子推到这些按 钮上面.箱子有 ...

  2. 【20180807模拟测试】t1 function

    low逼的我也只能写这样的水题... 题面 对于一个整数,定义 f(x)为他的每个数位的阶乘的乘积.例如 f(135)=1! * 3! * 5! =720.给出一个数 a(可以包含前缀零),a 满足他 ...

  3. [CSP-S模拟测试]:Tree(贪心)

    题目描述 给定一颗$n$个点的树,树边带权,试求一个排列$P$,使下式的值最大 $$\sum \limits_{i=1}^{n-1}maxflow(P_i,P_{i+1})$$ 其中$maxflow( ...

  4. [CSP-S模拟测试]:tree(DP)

    题目传送门(内部题57) 输入格式 第一行包含一个数:$n$表示树的节点数.接下来$n-1$行,每行包含两个数:$u,v$表示无根树的一条边. 输出格式 输出$n$行,第$i$行包含一个浮点数,保留三 ...

  5. [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)

    目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...

  6. noi2019模拟测试赛(四十七)

    noi2019模拟测试赛(四十七) T1与运算(and) 题意: ​ 给你一个序列\(a_i\),定义\(f_i=a_1\&a_2\&\cdots\&a_i\),求这个序列的所 ...

  7. Android单元测试与模拟测试详解

    测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...

  8. 安装nginx python uwsgi环境 以及模拟测试

    uwsgi帮助文档: http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html http://uwsgi-docs.re ...

  9. 利用Python中的mock库对Python代码进行模拟测试

    这篇文章主要介绍了利用Python中的mock库对Python代码进行模拟测试,mock库自从Python3.3依赖成为了Python的内置库,本文也等于介绍了该库的用法,需要的朋友可以参考下     ...

随机推荐

  1. Python开发工具之Sublime Text 3基于文件创建项目

    说明: 本地windows系统 本地已安装Sublime Text 3; 本地已创建python项目文件,如test,并在该文件夹下创建了虚拟环境venv(test/venv). 1.创建项目 依次鼠 ...

  2. oracle 优化相关

    --选择最有效率的表名顺序:  Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,  在FROM子句中包含多 ...

  3. windows搭建本地IIS服务器+php安装+移动设备内网访问服务器

    启动IIS服务 1. 打开 “控制面板” => "程序" => "启用或关闭Window功能": 2. 接着勾选相应设置: 3. 继续勾选对应目录下 ...

  4. python初学者日记02(正则表达式)

    写作时间:2018/12/17 作者:永远的码农(博客园) 一.正则表达式简介: 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或R ...

  5. es6新特性之 class 基本用法

    javaScript 语言中,生成实例对象的传统方法是通过构造函数,与传统的面向对象语言(比如 C++ 和 Java)差异很大,ES6 提供了更接近传统语言的写法,引入了 class(类)这个概念,作 ...

  6. ziplist之详细分析

    压缩列表ziplist ziplist是一种连续,无序的数据结构.压缩列表是 Redis 为了节约内存而开发的, 由一系列特殊编码的连续内存块组成的顺序型(sequential)数据结构. 组成 属性 ...

  7. linux操作之软件安装(二)(源码安装)

    源码安装 linux上的软件大部分都是c语言开发的 , 那么安装需要gcc编译程序才可以进行源码安装. yum install -y gcc #先安装gcc 安装源码需要三个步骤 1) ./confi ...

  8. C#的哈希表Hashtable同步方法

    在多线程环境的操作中对Hashtable进行操作需要进行同步控制,有两种方法,一种是由.Net自动控制:一种是在代码中自己控制. 1.使用Hashtable.Synchronized进行同步 Hash ...

  9. Delphi采用接口实现DLL调用

    Delphi使用模块化开发,可以采用DLL或者BPL,两者的区别是BPL只能被同版本的Delphi使用,DLL可以被不同版本和不同开发工具的开发的软件调用. 因此我们的软件大多使用Delphi作为界面 ...

  10. rails应用中各数据平台的对接

    1.mongo #Gemfile添加如下两个gem包gem 'mongoid', '~> 5.1.0' gem 'mongo', '~> 2.4’ @client = Mongo::Cli ...