http://www.lydsy.com/JudgeOnline/problem.php?id=3624 (题目链接)

题意

  给出一张无向图,其中有0类边和1类边。问能否构成正好有K条0类边的生成树,并输出方案。

Solution

  先将所有1类边加入生成树,然后再加入0类边,那么现在加入的0类边就是必须加入的0类边,将它们打上标记。然后再将并查集初始化,继续加0类边直到数量达到K,最后加1类边。

细节

  最后必须输出换行符。。。

代码

// bzoj3624
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=20010,maxm=100010;
struct edge {int u,v,w;}e[2][maxm],ans[maxm];
int n,m,K,M[2],fa[maxn]; int find(int x) {
return fa[x]==x ? x : fa[x]=find(fa[x]);
}
int main() {
scanf("%d%d%d",&n,&m,&K);
for (int u,v,w,i=1;i<=m;i++) {
scanf("%d%d%d",&u,&v,&w);
e[w][++M[w]]=(edge){u,v,w};
}
int cnt=0,s=0;
for (int i=1;i<=n;i++) fa[i]=i;
for (int i=1;i<=M[1];i++) {
int r1=find(e[1][i].u),r2=find(e[1][i].v);
if (r1!=r2) cnt++,fa[r1]=r2;
}
if (cnt<n-1) {
for (int i=1;i<=M[0];i++) {
int r1=find(e[0][i].u),r2=find(e[0][i].v);
if (r1!=r2) ans[++s]=e[0][i],cnt++,fa[r1]=r2;
}
if (cnt<n-1 || s>K) {puts("no solution");return 0;}
}
for (int i=1;i<=n;i++) fa[i]=i;
for (int i=1;i<=s;i++) fa[find(ans[i].u)]=find(ans[i].v);
for (int i=1;i<=M[0];i++) {
if (s==K) break;
int r1=find(e[0][i].u),r2=find(e[0][i].v);
if (r1!=r2) ans[++s]=e[0][i],fa[r1]=r2;
}
if (s<K) {puts("no solution");return 0;}
for (int i=1;i<=M[1];i++) {
int r1=find(e[1][i].u),r2=find(e[1][i].v);
if (r1!=r2) ans[++s]=e[1][i],fa[r1]=r2;
}
for (int i=1;i<=s;i++) printf("%d %d %d\n",ans[i].u,ans[i].v,ans[i].w);
return 0;
}

  

【bzoj3624】Apio2008—免费道路的更多相关文章

  1. [BZOJ3624][Apio2008]免费道路

    [BZOJ3624][Apio2008]免费道路 试题描述 输入 输出 输入示例 输出示例 数据规模及约定 见“输入”. 题解 第一步,先尽量加入 c = 1 的边,若未形成一个连通块,则得到必须加入 ...

  2. BZOJ3624: [Apio2008]免费道路(最小生成树)

    题意 题目链接 Sol 首先答案一定是一棵树 这棵树上有一些0边是必须要选的,我们先把他们找出来,如果数量$\geqslant k$显然无解 再考虑继续往里面加0的边,判断能否加到k条即可 具体做法是 ...

  3. bzoj 3624: [Apio2008]免费道路 生成树的构造

    3624: [Apio2008]免费道路 Time Limit: 2 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 111  Solved: 4 ...

  4. 题解 Luogu P3623 [APIO2008]免费道路

    [APIO2008]免费道路 题目描述 新亚(New Asia)王国有 N 个村庄,由 M 条道路连接.其中一些道路是鹅卵石路,而其它道路是水泥路.保持道路免费运行需要一大笔费用,并且看上去 王国不可 ...

  5. BZOJ 3624: [Apio2008]免费道路

    3624: [Apio2008]免费道路 Time Limit: 2 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1201  Solved:  ...

  6. [Apio2008]免费道路[Kruscal]

    3624: [Apio2008]免费道路 Time Limit: 2 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1292  Solved:  ...

  7. P3623 [APIO2008]免费道路

    3624: [Apio2008]免费道路 Time Limit: 2 Sec Memory Limit: 128 MBSec Special Judge Submit: 2143 Solved: 88 ...

  8. Kruskal算法及其类似原理的应用——【BZOJ 3654】tree&&【BZOJ 3624】[Apio2008]免费道路

    首先让我们来介绍Krukal算法,他是一种用来求解最小生成树问题的算法,首先把边按边权排序,然后贪心得从最小开始往大里取,只要那个边的两端点暂时还没有在一个联通块里,我们就把他相连,只要这个图里存在最 ...

  9. [APIO2008]免费道路

    [APIO2008]免费道路 BZOJ luogu 先把必须连的鹅卵石路连上,大于k条no solution 什么样的鹅卵石路(u,v)必须连?所有水泥路都连上仍然不能使u,v连通的必须连 补全到k条 ...

  10. [APIO2008]免费道路(生成树)

    新亚(New Asia)王国有 N 个村庄,由 M 条道路连接.其中一些道路是鹅卵石路,而其它道路是水泥路.保持道路免费运行需要一大笔费用,并且看上去 王国不可能保持所有道路免费.为此亟待制定一个新的 ...

随机推荐

  1. BZOJ 1082 【SCOI2005】 栅栏

    Description 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材.可是木材店老板说他这里只剩下少部分大规格的木板了.不过约翰可以购买这些木 ...

  2. Dynamics CRM 2016 的新特性

    新版本CRM (2016 with update 0.1) 发布已有几个月了,总结一下新特性,从几个方面来看: 1. 针对整合功能的新特性 (1) 增加了CRM App for Outlook. 这个 ...

  3. (转)DataMatrix编码2——伽罗华域运算

    原文出处:http://blog.sina.com.cn/s/blog_4572df4e01019wsj.html 伽罗华域即有限域,RS编码在此域中进行运算,故不得不对其有所了解.DataMatri ...

  4. android studio 使用问题 解决方法

    1. Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.build.ap ...

  5. web 前端常用组件【01】Pagination 分页

    分页组件几乎是一般网站都会涉及到的组件,网上有很多这样的插件,自己挑来跳去选择了这一款. 官方Demo网址:http://mricle.com/JqueryPagination 功能强大,可扩展性比较 ...

  6. .NET MVC AjaxHelper

    我们首先必须开启 非入侵式 Ajax:导入Jquery和unobtrusiveAjax文件 已经默认开启客户端验证 和 非侵入式js <add key="ClientValidatio ...

  7. mac下CornerstoneSVN出错 Description : The working copy is locked due to a previous error

    使用CornerStone工具update最新SVN代码报错:The working copy is locked due to a previous error,不仅无法上传,也无法更新,错误提示被 ...

  8. 抛开react,如何理解virtual dom和immutability

    去年以来,React的出现为前端框架设计和编程模式吹来了一阵春风.很多概念,无论是原本已有的.还是由React首先提出的,都因为React的流行而倍受关注,成为大家研究和学习的热点.本篇分享主要就聚焦 ...

  9. SQLite剖析之内核研究

    先从全局的角度把握SQLite内核各个模块的设计和功能.SQLite采用了层次化.模块化的设计,而这些使得它的可扩展性和可移植性非常强.而且SQLite的架构与通用DBMS的结构差别不是很大,所以它对 ...

  10. 【JavaScript】 闭包 我战战兢兢的接触了它

    源:http://www.liaoxuefeng.com 1. 注意这里用了一个“创建一个匿名函数并立刻执行”的语法: (function (x) { return x * x; })(3); 理论上 ...