题目描述

或许会传送失败的传送门

#分析

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

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

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

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

以上来自某标答

关于各种调试时的槽点

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. java线程安全单例

    public class MySingleton { // 使用volatile关键字保其可见性 volatile private static MySingleton instance = null ...

  2. Office365学习笔记—Xslt自定义列表视图

    1,在Office365中需要添加自定义的视图!用Spd添加视图,这儿我添加一个testView! (1)打开testView.aspx将</ZoneTemplate>节点中的内容全部删除 ...

  3. windows安装的mysql中文乱码的坑

    本机装的mysql为5.6的,从代码执行的中文inert语句总是显示问号,然后在中文查询是都会报问题 今天终于解决了! 问题解决方法为: 找到my.ini文件在文件中加入 [client]defaul ...

  4. Oracle创建表、修改表、删除表、约束条件语法

    一. 使用create关键字创建表 --(1)创建新表use 数据库(在那个数据库中建表)create table 表名(字段名1(列名) 数据类型 列的特征,字段名2(列名) 数据类型 列的特征(N ...

  5. 【centOS7.3 彻底卸载MySQL】

    废话不多说,直接正面刚. 1.删除MySQL yum remove mysql mysql-server mysql-libs mysql-server; 执行后继续查找相关文件 find / -na ...

  6. 一个hibernate中的异常:NonUniqueDiscoveredSqlAliasException

    在hibernate中用SQL查询返回的结果集中,列名或别名必须唯一,否则会报下面的错误.返回的结果集中,列名或别名可以没有,但只能有一列没有. //空别名重复的情况:org.hibernate.lo ...

  7. dnspy的详细配置,dnspy如何过滤反编译之后的乱码,dnspy如何反编译表达式目录树

    dnSpy应该是目前使用最多的.net反编译工具.很多情况下反编译C#代码非常方便,特别是查找基类,子类.搜索一些class,方法.接口,非常方便.比ILspy好很多.而且dnspy是可以配置的. 如 ...

  8. 使用JDK开发WebServrice案例

    使用JDK开发WebServrice案例: 一.开发WebService服务器端 第一步:创建Java工程 ,创建相应的包(服务端)使用JDK开发(1.6以上版本) 第二步:建一个接口WebServi ...

  9. ubuntu下安装应用(搜狗输入法)

  10. PHP array_reduce()函数的应用解析

    实例 向用户自定义函数发送数组中的值,并返回一个字符串: <?php function myfunction($v1,$v2) { return $v1 . "-" . $v ...