题面

我们发现我们可以很容易知道最终完成的生成树中有多少鹅卵石路,但是我们不好得到这棵生成树的结构,所以我们尽量“谨慎”地完成生成树·,最好是一点点加到我们要达到的标准而不是通过删掉一些东西来完成

我们把水泥路视为权值为零,鹅卵石路视为权值为一,做最小生成树,这时加入在生成树里的鹅卵石路一定是必须加入的。再然后我们逆着做最小生成树做到恰好有$k$条鹅卵石路,然后用水泥路把图连通起来就好了

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=;
struct a
{
int n1,n2;
int val,imp;
}mst[M],outp[N];
int aset[N],imp[N];
int n,m,c,k,rd,cnt;
bool cmp1(a x,a y)
{
return x.val<y.val;
}
bool cmp2(a x,a y)
{
return x.imp==y.imp?x.val>y.val:x.imp>y.imp;
}
int find(int x)
{
return x==aset[x]?x:aset[x]=find(aset[x]);
}
int main ()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&mst[i].n1,&mst[i].n2,&rd);
mst[i].imp=false,mst[i].val=rd^;
}
for(int i=;i<=n;i++) aset[i]=i;
sort(mst+,mst++m,cmp1);
for(int i=;i<=m;i++)
{
int f1=find(mst[i].n1),f2=find(mst[i].n2);
if(f1!=f2) aset[f1]=f2,mst[i].imp=mst[i].val;
}
for(int i=;i<=n;i++) aset[i]=i;
sort(mst+,mst++m,cmp2);
for(int i=;i<=m&&c<k;i++)
{
int f1=find(mst[i].n1),f2=find(mst[i].n2);
if(f1!=f2) aset[f1]=f2,c+=mst[i].val,outp[++cnt]=mst[i];
}
sort(mst+,mst++m,cmp1);
for(int i=;i<=m&&cnt<=n-;i++)
{
int f1=find(mst[i].n1),f2=find(mst[i].n2);
if(f1!=f2) aset[f1]=f2,c+=mst[i].val,outp[++cnt]=mst[i];
}
if(c!=k) printf("no solution\n"),exit();
for(int i=;i<=cnt;i++)
printf("%d %d %d\n",outp[i].n1,outp[i].n2,outp[i].val^);
return ;
}

最新文章

  1. 【Beta】Scrum08
  2. Android WebView useragent
  3. android Envieroment类
  4. activiti自定义流程之Spring整合activiti-modeler5.16实例(五):流程定义列表
  5. 剑指 offer set 4 矩形覆盖
  6. UrlRewriter.dll伪静态实现二级域名泛解析
  7. PYTHON线程知识再研习D---可重入锁
  8. 可靠通信的保障 —— 使用ACK机制发送自定义信息——ESFramework 通信框架4.0 快速上手(12)
  9. elementUI-事件绑定Bug
  10. MySQL 的分页查询 SQL 语句
  11. 搞清Image加载事件(onload)、加载状态(complete)后,实现图片的本地预览,并自适应于父元素内(完成)
  12. sqlldr的用法 (这个最完整)
  13. 2018-2019-1 20189203 《Linux内核原理与分析》第七周作业
  14. Java微信公众号安全模式消息解密
  15. vim上次和下次光标位置
  16. RobotFramework+Selenium2+Appium环境搭建
  17. Route学习笔记之Area的Route注册
  18. HAproxy目录分发
  19. hdu-1394(线段树)
  20. Python抓取歌词自制FreeStyle

热门文章

  1. 列出连通集(mooc)
  2. Update类型_JDBC的方法_JAVA方法_Loadrunner脚本
  3. 高可用Kubernetes集群-9. 部署kubelet
  4. 如何选择合适的Qt5版本?
  5. java运行时内存分类
  6. Beta冲刺第二周王者荣耀交流协会第四次会议
  7. 第18次Scrum会议(10/30)【欢迎来怼】
  8. BETA阶段冲刺集合
  9. 0511团队项目2.0--产品product backlog
  10. 栈和队列在python中的实现