[APIO2008]免费道路

BZOJ

luogu

先把必须连的鹅卵石路连上,大于k条no solution

什么样的鹅卵石路(u,v)必须连?所有水泥路都连上仍然不能使u,v连通的必须连

补全到k条鹅卵石路,补不全no solution

最后用水泥路构出生成树,构不出no solution

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int _=1e5+5;
  4. int re(){
  5. int x=0,w=1;char ch=getchar();
  6. while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
  7. while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
  8. return x*w;
  9. }
  10. bool vis[_];
  11. int n,m,k,cnt,fa[_],ans[_];
  12. struct edge{int u,v,c;}e[_];
  13. int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
  14. void unite(int x,int y){
  15. x=find(x);y=find(y);
  16. if(x^y)fa[x]=y;
  17. }
  18. int main(){
  19. n=re(),m=re(),k=re();
  20. for(int i=1;i<=n;i++)fa[i]=i;
  21. for(int i=1;i<=m;i++){
  22. int u=re(),v=re(),c=re();
  23. e[i]=(edge){u,v,c};
  24. if(c)unite(u,v);
  25. }
  26. for(int i=1;i<=m;i++){
  27. if(find(e[i].u)^find(e[i].v)){
  28. unite(e[i].u,e[i].v);
  29. ans[++cnt]=i;vis[i]=1;
  30. }
  31. }
  32. if(cnt>k){puts("no solution");return 0;}
  33. for(int i=1;i<=n;i++)fa[i]=i;
  34. for(int i=1;i<=cnt;i++)
  35. unite(e[ans[i]].u,e[ans[i]].v);
  36. for(int i=1;i<=m;i++){
  37. if(e[i].c||vis[i])continue;
  38. if(find(e[i].u)^find(e[i].v)){
  39. unite(e[i].u,e[i].v);
  40. ans[++cnt]=i;
  41. if(cnt==k)break;
  42. }
  43. }
  44. if(cnt<k){puts("no solution");return 0;}
  45. for(int i=1;i<=m;i++){
  46. if(!e[i].c)continue;
  47. if(find(e[i].u)^find(e[i].v)){
  48. unite(e[i].u,e[i].v);
  49. ans[++cnt]=i;
  50. if(cnt==n-1)break;
  51. }
  52. }
  53. if(cnt<n-1){puts("no solution");return 0;}
  54. for(int i=1;i<n;i++)
  55. printf("%d %d %d\n",e[ans[i]].u,e[ans[i]].v,e[ans[i]].c);
  56. return 0;
  57. }

[APIO2008]免费道路的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. P3623 [APIO2008]免费道路

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

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

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

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

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

  9. 【bzoj3624】Apio2008—免费道路

    http://www.lydsy.com/JudgeOnline/problem.php?id=3624 (题目链接) 题意 给出一张无向图,其中有0类边和1类边.问能否构成正好有K条0类边的生成树, ...

随机推荐

  1. Angular 学习笔记——ng-repeat&filter

    <!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...

  2. 推荐系统学习(2)——基于TF-IDF的改进

    使用用户打标签次数*物品打标签次数做乘积的算法尽管简单.可是会造成热门物品推荐的情况.物品标签的权重是物品打过该标签的次数,用户标签的权重是用户使用过该标签的次数.从而导致个性化的推荐减少,而造成热门 ...

  3. 通过Navicat for MySQL远程连接的时候报错mysql 1130 的解决方法

    用Navicat连接远程MYSQL,提示如下错误,我以为是自己的防火墙问题,但是关了,依然不行. ERROR 1130: Host '192.168.1.3' is not allowed to co ...

  4. C++ 模板详解(一)(转)

    C++模板 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数.返回值取得任意类型. 模板是一种对类型进行参数化的工具: 通常有 ...

  5. Shell脚本之:退出循环

    Shell也使用 break 和 continue 来跳出循环. break命令 下面的例子中,脚本进入死循环直至用户输入数字大于5,使用break跳出这个循环. #!/bin/bash while ...

  6. NSDate 类的总结,全面基础

    <span style="font-size:24px;"><span style="font-size:18px;">//1.创建日期 ...

  7. Atitit.dart语言的特性  编译时js语言大总结

    Atitit.dart语言的特性  编译时js语言大总结 1. 原型环境1 1.1. Dart可以编译js3 2. 第二个期待的理由是Dart的语言特性,没有什么特别特性好像,类似java c#一小时 ...

  8. Memcahed服务异常监控脚本

    #!/bin/sh # filename: mon_mc.sh export MemcahedIp=$1export MemcahedPort=$2export NcCmd="nc $Mem ...

  9. ubuntu 16.04查询文件安装目录

    dpkg -L filename dpkg -l | grep filename whereis filename find / -name filename

  10. 【Python web自动化】之读取配置文件参数,利用cookie返回值进行跳过验证码进行登录操作

    当进行Python的Web自动化时,会涉及到验证码问题,该如何跳过执行呢,下面请看代码: 1.首先新建配置文件*.ini格式 config.ini [db] #基础地址: baseurl = http ...