codeforces

description

给出一张\(n\)点\(m\)条边的无向图,求一棵满足\(1\)号点度数恰好为\(k\)的最小生成树,并输出方案。

\(1\le k\le n\le5000,m\le100000\)

sol

二分一个权值,给每条连接\(1\)号点的边的边权加上这个权值,跑最小生成树即可。

输出方案有点恶心,需要合理控制同边权的边的选取。

code

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int gi(){
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
const int N = 1e5+5;
struct edge{
int u,v,w,id;
bool operator < (const edge &b) const
{return w==b.w?u<b.u:w<b.w;}
}E[N];
int n,m,k,fa[N],vis[N],ans,tot;
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
int solve(int c){
for (int i=1;i<=m;++i) if (E[i].u==1) E[i].w+=c;
sort(E+1,E+m+1);tot=0;
for (int i=1;i<=n;++i) fa[i]=i;
for (int i=1;i<=m;++i)
if (find(E[i].u)!=find(E[i].v)){
fa[find(E[i].u)]=find(E[i].v);
tot+=E[i].u==1;
}
for (int i=1;i<=m;++i) if (E[i].u==1) E[i].w-=c;
return tot;
}
void getans(int c){
for (int i=1;i<=m;++i) if (E[i].u==1) E[i].w+=c;
sort(E+1,E+m+1);tot=ans=0;
for (int i=1;i<=n;++i) fa[i]=i;
for (int i=1;i<=m;++i)
if (find(E[i].u)!=find(E[i].v)&&tot+(E[i].u==1)<=k){
fa[find(E[i].u)]=find(E[i].v);
++ans;tot+=E[i].u==1;vis[i]=1;
}else vis[i]=0;
if (ans<n-1||tot<k) {puts("-1");return;}
printf("%d\n",n-1);
for (int i=1;i<=m;++i) if (vis[i]) printf("%d ",E[i].id);
puts("");
} int main(){
n=gi();m=gi();k=gi();
for (int i=1;i<=m;++i){
int u=gi(),v=gi(),w=gi();
if (u>v) swap(u,v);
E[i]=(edge){u,v,w,i};
}
int L=-N,R=N,P=1e9;
while (L<=R){
int mid=L+R>>1;
if (solve(mid)>=k) P=mid,L=mid+1;else R=mid-1;
}
if (P==1e9) return puts("-1"),0;
getans(P);
return 0;
}

[CF125E]MST Company的更多相关文章

  1. luogu CF125E MST Company wqs二分 构造

    LINK:CF125E MST Company 难点在于构造 前面说到了求最小值 可以二分出斜率k然后进行\(Kruskal\) 然后可以得到最小值.\(mx\)为值域. 得到最小值之后还有一个构造问 ...

  2. CF125E MST company (凸优化+MST)

    qwq自闭的一个题 我来修锅辣!!!!!! 这篇题解!可以\(hack\)全网大部分的做法!!! 首先,我们可以把原图中的边,分成两类,一类是与\(1\)相连,另一类是不与\(1\)相连. 原题就转化 ...

  3. CF-125E MST Company (单度限制最小生成树)

    参考红宝书 题目链接 对除 1 号点顶点外的点集,求一次最小生成森林,对于最小生成森林的联通分量,选择最短的一条边与 1 号点相连.设此时 1 号点的度为 \(k_0\),如果 \(k_0\lt L\ ...

  4. 【CF125E】MST Company(凸优化,最小生成树)

    [CF125E]MST Company(凸优化,最小生成树) 题面 洛谷 CF 题解 第一眼看见就给人丽洁姐那道\(tree\)一样的感觉. 那么二分一个权值,加给所有有一个端点是\(1\)的边, 然 ...

  5. CodeForces 125E MST Company

    E. MST Company time limit per test 8 seconds memory limit per test 256 megabytes input standard inpu ...

  6. CODEFORCES 125E MST Company 巧用Kruskal算法

    题意:给定一个带权边无向图,求最小生成树,且满足第一个节点的度为固定的k 无解则输出-1 数据规模: 节点数n和限制k<=5000 边数m<=10^5 时限8sec 思路: 首先时限比较宽 ...

  7. DP学习记录Ⅱ

    DP学习记录Ⅰ 以下为 DP 的优化. 人脑优化DP P5664 Emiya 家今天的饭 正难则反.考虑计算不合法方案.一个方案不合法一定存在一个主食,使得该主食在多于一半的方法中出现. 枚举这个&q ...

  8. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  9. codeforces 125 A-E 补题

    A Measuring Lengths in Baden 进制转换 水题 #include<bits/stdc++.h> using namespace std; int main() { ...

随机推荐

  1. (9)SpriteFrameCache和TextureCache

    简介 SpriteFrameCache 主要服务于多张碎图合并出来的纹理图片.这种纹理在一张大图中包含了多张小图,直接通过TextureCache引用会有诸多不便,因而衍生出来精灵框帧的处理方式,即把 ...

  2. GIT学习笔记(1):创建版本库

    GIT学习笔记(1):创建版本库 创建版本库 1.创建合适目录并初始化为仓库 版本库即需要交由Git进行版本控制的目录,其下所有文件的修改.删除,Git都能跟踪还原. 说明:初始化后,当前目录下会多出 ...

  3. C# 解析soap数据为json格式

    数据格式: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soa ...

  4. 基于SSH RSA的信任关系

    RSA 非对称加密算法 client  --->  server 私钥 公钥 1. 客户端生成密钥对 ssh-keygen -t rsa 执行后产生的密钥对会分别追加写到当前用户家目录下的以下文 ...

  5. ExtJS清除表格缓存

    背景 在使用ExtJS时遇到不少坑,如果不影响使用也无所谓,但是有些不能忍的,比如表格数据缓存问题.如果第一次打开页面查询出一些数据展示在表格中:第二次打开,即使不查询也会有数据,这是缓存的数据. 我 ...

  6. $n,$!等的含义

    $$ Shell本身的PID(ProcessID)$! Shell最后运行的后台命令的PID$? 上一个运行的命令是否成功的标志,成功为0,失败不为0$* 所有参数列表.如"$*" ...

  7. php 添加时间戳

    <?php $tomorrow = mktime(,,,date(,date("Y")); echo "Tomorrow is ".date(" ...

  8. python 执行字符串中的python代码

    mycode = 'print("hello world")' code = """ def mutiply(x,y): return x*y pri ...

  9. [QT]QApplication和QCoreApplication的用法

    转自:http://www.tuicool.com/articles/qmI7Bf 故事的背景是这样的,我们在写QT程序的时候或者在开始写QT程序之前总会看到这样的语句 QApplication ap ...

  10. tenserflow models包的安装

    1.下载 models包 https://github.com/tensorflow/models 2.将models包拷贝到本机Python包的安装地址即可,本机Python包的安装地址的查看方式可 ...