带有限制的生成树

首先不难想到二分答案转化为判定性问题

假设二分出了一个答案p,

首先我们先考虑建一级公路。

由于一级公路费用是大于二级公路的,所以对于那些一级公路花费<=p的道路,

不难想到让他们建一级公路显然更合适。

如果能建一级公路的建道路数>=k

并且再选择二级公路能选到n-1条,说明答案可行

注意这里的道路选择一定要满足生成树的性质,所以我们要加入并查集优化

 type node=record
       x,y,c1,c2:longint;
     end; var a:array[..] of node;
    fa,d:array[..] of longint;
    mid,i,n,k,l,r,ans,m:longint; function getf(x:longint):longint;
  begin
    if fa[x]<>x then fa[x]:=getf(fa[x]); 
    exit(fa[x]);
  end; function check(p:longint):boolean;
  var s,i,k1,k2:longint;
  begin
    for i:= to n do
    begin
      d[i]:=;
      fa[i]:=i;
    end;
    s:=;
    for i:= to m do
      if a[i].c1<=p then
      begin
        k1:=getf(a[i].x);
        k2:=getf(a[i].y);
        if k1<>k2 then
        begin
          if d[k1]>d[k2] then fa[k2]:=k1
          else begin
            fa[k1]:=k2;
            if d[k1]=d[k2] then inc(d[k2]);
          end;
          inc(s);
        end;
      end;
    if s<k then exit(false);
    if s=n- then exit(true);
    for i:= to m do
      if (a[i].c2<=p) and (a[i].c1>p) then
      begin
        k1:=getf(a[i].x);
        k2:=getf(a[i].y);
        if k1<>k2 then
        begin
          if d[k1]>d[k2] then fa[k2]:=k1
          else begin
            fa[k1]:=k2;
            if d[k1]=d[k2] then inc(d[k2]);
          end;
          inc(s);
          if s=n- then exit(true);
        end;
      end;
    exit(false);
  end; begin
  readln(n,k,m);
  l:=;
  for i:= to m- do
  begin
    with a[i] do
    begin
      readln(x,y,c1,c2);
    end;
    if a[i].c1>r then r:=a[i].c1;
    if a[i].c2<l then l:=a[i].c2;
  end;
  ans:=r;
  while l<=r do
  begin
    mid:=(l+r) shr ;
    if check(mid) then
    begin
      ans:=mid;
      r:=mid-;
    end
    else l:=mid+;
  end;
  writeln(ans);
end.

bzoj1196的更多相关文章

  1. BZOJ-1196 公路修建问题 最小生成树Kruskal+(二分??)

    题目中一句话,最大费用最小,这么明显的二分的提示(by 以前morestep学长的经验传授)...但完全没二分,1A后感觉很虚.. 1196: [HNOI2006]公路修建问题 Time Limit: ...

  2. BZOJ1196: [HNOI2006]公路修建问题

    Description OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织 ...

  3. bzoj1196:[Hnoi2010]chorus 合唱队

    这数据范围明显的区间dp啊...然而据说二维会wa...那就写三维把... #include<cstdio> #include<cstring> #include<cct ...

  4. [BZOJ1196][HNOI2006]公路修建问题 二分答案+最小生成树

    Description OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那 里的交通情况还是很糟糕.所以,OIER Association组 ...

  5. bzoj1196 公路修建问题

    Description OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织 ...

  6. [HNOI2006]公路修建问题 BZOJ1196 Kruskal

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

  7. 【分块答案】【最小生成树】【kruscal】bzoj1196 [HNOI2006]公路修建问题

    二分(分块)枚举 边权上限.用kruscal判可行性. #include<cstdio> #include<algorithm> #include<cstring> ...

  8. BZOJ1196 [HNOI2006]公路修建问题 【二分 + Kruskal】

    题目 OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织成立了,旨在建立O ...

  9. 【bzoj1196】[HNOI2006]公路修建问题

    二分答案 验证有一种贪心的思想,就是如果这条路的c1比二分的值还小,那就要果断选择一级公路. 搜过一遍后,如果可供选择的一级公路小于k,就可以直接返回否了. 接下来继续选择,如果可以选到n-1条路,就 ...

随机推荐

  1. 问题解决:使用angularjs、ionic框架如何实现返回上一页并刷新

    普通的js返回并刷新这里就不多说了,百度就有很多方法. 下面说的是使用了angularjs.ionic开发的一个手机app中使用的一个返回上一页并刷新的方法. 场景:回复的页面是单独的,点击保存回复后 ...

  2. 在Linux系统下安装大于mysql5.5版本的数据库

    linux下mysql 5.5的安装方法: 1.安装所需要系统库相关库文件      gcc等开发包,在安装linux系统的时候安装. 2.创建mysql安装目录 # mkdir -p /usr/lo ...

  3. 九度OJ 1386 旋转数组的最小数字 【算法】

    题目地址:http://ac.jobdu.com/problem.php?pid=1386 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋 ...

  4. SharePoint工作流(workflow)不能自动启动

    在定制工作流时,设置了当Item创建或更改时,触发工作流.用系统帐户登录时一直不会触发.这是因为这是SharePoint的安全机制,阻止了在系统帐户登陆时自动启动工作流. 解决方法:使用不是系统账户的 ...

  5. windows phone 操作 http异步返回结果

    wp中为了提升用户体验,砍掉了http的同步操作,仅支持http异步请求,那么该如何及时处理异步操作返回的结果.纠结了很久,终于在技术群中好友的帮助下解决了问题,借助事件,将异步编程模型模式简单的处理 ...

  6. 超过130个你需要了解的vim命令

    基础 :e filename Open filename for edition :w Save file :q Exit Vim :q! Quit without saving :x Write f ...

  7. hdu 5055 Bob and math problem

    先把各个数字又大到小排列,如果没有前导零并且为奇数,则直接输出.如果有前导零,则输出-1.此外,如果尾数为偶数,则从后向前找到第一个奇数,并把其后面的数一次向前移动,并把该奇数放到尾部. 值得注意的是 ...

  8. lnmp 虚拟主机配置及重写

    lnmp安装与调试,请看 http://www.cnblogs.com/lin3615/p/4376224.html 虚拟主机的配置编辑nginx配置文件 nginx.conf此为主配置文件 vim ...

  9. Visual Assist安装、破解方法

    1.从各种渠道下载Visual Assist安装程序及破解补丁. 2.在路径(Win7):C:\Users\UserName\AppData\Local\Microsoft\VisualStudio\ ...

  10. x86与x64与x86_64

    x86是指intel的开发的一种32位指令集,从386开始时代开始的,一直沿用至今,是一种cisc指令集,所有intel早期的cpu,amd早期的cpu都支持这种指令集,ntel官方文档里面称为“IA ...