P2323 [HNOI2006]公路修建问题

题目描述

输入输出格式

输入格式:

在实际评测时,将只会有m-1行公路

输出格式:


思路:

二分答案

然后把每条能加的大边都加上,然后加小边

但在洛谷的题解中,没有采用二分答案而直接先处理k条大边,再处理小边的做法我认为是有问题的,欢迎证明或证伪。


Code:

  1. #include <cstdio>
  2. #include <algorithm>
  3. const int N=10010;
  4. const int M=20010;
  5. struct node
  6. {
  7. int u,v,w,id;
  8. bool friend operator <(node n1,node n2)
  9. {
  10. return n1.w<n2.w;
  11. }
  12. }e1[M],e2[M];
  13. int n,k,m;
  14. void init()
  15. {
  16. scanf("%d%d%d",&n,&k,&m);
  17. for(int i=1;i<m;i++)
  18. {
  19. scanf("%d%d%d%d",&e1[i].u,&e1[i].v,&e1[i].w,&e2[i].w);
  20. e2[i].u=e1[i].u;e2[i].v=e1[i].v;
  21. e1[i].id=e2[i].id=i;
  22. }
  23. std::sort(e1+1,e1+m);
  24. std::sort(e2+1,e2+m);
  25. }
  26. int f[N];
  27. std::pair <int,int> ans[N];
  28. int Find(int x){return f[x]=f[x]==x?x:Find(f[x]);}
  29. void Merge(int x,int y){f[Find(y)]=Find(x);}
  30. bool check(int len)
  31. {
  32. for(int i=1;i<=n;i++) f[i]=i;
  33. int e=0,we=0;
  34. for(int i=1;i<m;i++)
  35. {
  36. if(e1[i].w>len) break;
  37. int u=e1[i].u,v=e1[i].v;
  38. if(Find(u)!=Find(v))
  39. {
  40. Merge(u,v);
  41. ans[++e].first=e1[i].id;
  42. ans[e].second=1;
  43. we++;
  44. }
  45. }
  46. for(int i=1;i<m;i++)
  47. {
  48. if(e2[i].w>len) break;
  49. int u=e2[i].u,v=e2[i].v;
  50. if(Find(u)!=Find(v))
  51. {
  52. Merge(u,v);
  53. ans[++e].first=e2[i].id;
  54. ans[e].second=2;
  55. }
  56. }
  57. return e==n-1&&we>=k;
  58. }
  59. void work()
  60. {
  61. int l=1,r=30000;
  62. while(l<r)
  63. {
  64. int mid=l+r>>1;
  65. if(check(mid))
  66. r=mid;
  67. else
  68. l=mid+1;
  69. }
  70. check(l);
  71. printf("%d\n",l);
  72. std::sort(ans+1,ans+n);
  73. for(int i=1;i<n;i++)
  74. printf("%d %d\n",ans[i].first,ans[i].second);
  75. }
  76. int main()
  77. {
  78. init();
  79. work();
  80. return 0;
  81. }

2018.8.2

洛谷 P2323 [HNOI2006]公路修建问题 解题报告的更多相关文章

  1. 洛谷P2323 [HNOI2006] 公路修建问题 [二分答案,生成树]

    题目传送门 公路修建问题 题目描述 OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Associa ...

  2. 洛谷 P2323 [HNOI2006]公路修建问题

    题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 输入输出样例 输入样例#1: 4 2 5 1 2 6 5 1 3 3 1 2 3 9 4 2 4 6 1 3 4 4 ...

  3. 1196/P2323: [HNOI2006]公路修建问题

    1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2191  Solved: 1258 Descriptio ...

  4. 【洛谷P1265】公路修建

    公路修建 题目链接 分析题意,可以发现,在(1)的条件下,(2)的情况是不会发生的, 于是直接求MST(Min Set Tree) 然而稠密图克鲁斯卡尔会TLE,建图还会爆空间, 所以用prime,用 ...

  5. P2323 [HNOI2006]公路修建问题

    题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 输入输出样例 输入样例#1: 4 2 5 1 2 6 5 1 3 3 1 2 3 9 4 2 4 6 1 输出样例# ...

  6. 【MST】P2323 [HNOI2006]公路修建问题

    Description 给定 \(n\) 个点 \(m - 1\) 条无向边,每条边有两种边权,贵一点的和便宜一点的.要求至少选择 \(k\) 条贵边使得图联通且花费最大的边权值最小. Input 第 ...

  7. 洛谷 P1852 [国家集训队]跳跳棋 解题报告

    P1852 [国家集训队]跳跳棋 题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在\(a\),\(b\), ...

  8. 洛谷 P3224 [HNOI2012]永无乡 解题报告

    P3224 [HNOI2012]永无乡 题目描述 永无乡包含 \(n\) 座岛,编号从 \(1\) 到 \(n\) ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 \(n\) 座岛排名,名次用 ...

  9. 洛谷 P3299 [SDOI2013]保护出题人 解题报告

    P3299 [SDOI2013]保护出题人 题目描述 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企 ...

随机推荐

  1. Qml-Dialog不能隐藏标题栏和按钮自定义

    在项目中,需要弹出一个对话框来完成用户输入的功能,为了考虑界面的同一,这里需要将原生自带的标题栏隐藏掉,换成自己写的 按照widget的写法,可以使用QDialog,但是qml与之对应的Dialog我 ...

  2. 题解 CF682C 【Alyona and the Tree】

    简单搜索题,我们每找到一组不满足题目给出条件的点和边就将其整个子树删除,然后最终答案加上该子树的大小即可.注意,搜索的时候如果当前的边权和sum已经为负了,应该将其改为0(可以想想为什么) 注:题目翻 ...

  3. 【转】: 探索Lua5.2内部实现:虚拟机指令(1) 概述

    Lua一直把虚拟机执行代码的效率作为一个非常重要的设计目标.而采用什么样的指令系统的对于虚拟机的执行效率来说至关重要. Stack based vs Register based VM 根据指令获取操 ...

  4. 在几份docx文档中里查找某个值

    import docx, os def readDocx(fileName): doc = docx.Document(fileName) content = '\n'.join([para.text ...

  5. netty in action 笔记 二

    netty的数据容器 网络数据的基本单位大多为字节,Java NIO 提供了ByteBuffer 作为它的字节容器,但使用起来过于复杂和繁琐.在Netty中, ByteBuffer 替代品是ByteB ...

  6. 【Python 开发】第三篇:python 实用小工具

    一.快速启动一个web下载服务器 官方文档:https://docs.python.org/2/library/simplehttpserver.html 1)web服务器:使用SimpleHTTPS ...

  7. poj 2155 (二维树状数组 区间修改 求某点值)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 33682   Accepted: 12194 Descript ...

  8. 小米 OJ 编程比赛 02 月常规赛

    Carryon 数数字 描述 Carryon 最近迷上了数数字,然后 Starry 给了他一个区间[l,r] ,然后提了几个要求, 需要将 ll 到 rr 之间的数全部转化成 16 进制,然后连起来. ...

  9. Python 学习笔记之——用 sklearn 对数据进行预处理

    1. 标准化 标准化是为了让数据服从一个零均值和单位方差的标准正态分布.也即针对一个均值为 \(mean\) 标准差为 \(std\) 的向量 \(X\) 中的每个值 \(x\),有 \(x_{sca ...

  10. nodejs笔记--与Redis的交互篇(六)

    原文地址:http://www.cnblogs.com/zhongweiv/p/node_redis.html 安装前准备 win64: Install python: http://www.pyth ...