题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3714

因为每个杯子下最多一个小球,所以从奇偶性就可以看出有没有球;

询问一段区间,等于知道一段区间的奇偶性;

设 s[i] 表示从 0 到 i 的小球总数的奇偶性,已知 s[0] = 0;

那么询问区间 [l,r] ,相当于知道了 s[l-1] ^ s[r],那么知道其中一个就可以知道另一个了,而目标是知道所有 s[i] , 1 <= i <= n

所以把询问区间 [l,r] 看做是 l-1 到 r 的一条边,求最小生成树即可;

竟然跑了13秒才过,明明做法都一样...

代码如下:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. typedef long long ll;
  7. int const xn=;
  8. int n,fa[xn];
  9. ll ans;
  10. struct N{int u,v,w;}ed[xn*xn];
  11. int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
  12. int rd()
  13. {
  14. int ret=,f=; char ch=getchar();
  15. while(ch<''||ch>''){if(ch=='-')f=; ch=getchar();}
  16. while(ch>=''&&ch<='')ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
  17. return f?ret:-ret;
  18. }
  19. bool cmp(N x,N y){return x.w<y.w;}
  20. int main()
  21. {
  22. n=rd(); int ct=;
  23. for(int i=;i<=n;i++)
  24. for(int j=i;j<=n;j++)
  25. ed[++ct].u=i-,ed[ct].v=j,ed[ct].w=rd();
  26. sort(ed+,ed+ct+,cmp);
  27. for(int i=;i<=n;i++)fa[i]=i;
  28. for(int i=;i<=ct;i++)
  29. {
  30. int x=find(ed[i].u),y=find(ed[i].v),w=ed[i].w;
  31. if(x==y)continue;
  32. fa[x]=y; ans+=w;
  33. }
  34. printf("%lld\n",ans);
  35. return ;
  36. }

bzoj 3714 [ PA 2014 ] Kuglarz —— 思路+最小生成树的更多相关文章

  1. bzoj 3714 [PA2014]Kuglarz——思路+最小生成树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3714 如果用s[ i ]表示前 i 个的奇偶性,那么c(i_j)表示s[ i-1 ]^s[ ...

  2. [PA 2014]Kuglarz

    Description 魔术师的桌子上有n个杯子排成一行,编号为1,2,…,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯子,你就可以获得奖品.花费c_ij元,魔术师就会告诉你杯子i,i+ ...

  3. 【BZOJ3714】Kuglarz(最小生成树)

    [BZOJ3714]Kuglarz(最小生成树) 题面 BZOJ Description 魔术师的桌子上有n个杯子排成一行,编号为1,2,-,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯 ...

  4. bzoj 3714 [PA2014]Kuglarz 最小生成树

    [PA2014]Kuglarz Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1335  Solved: 672[Submit][Status][Di ...

  5. bzoj 3714: [PA2014]Kuglarz【最小生成树】

    参考:https://blog.csdn.net/aarongzk/article/details/48883741 没想到吧.jpg 来自题解: "如果用sum[i]表示前i个杯子底球的总 ...

  6. 【PA 2014】Kuglarz

    [题目链接]            点击打开链接 [算法]            sum[i]表示前i个杯子中,杯子底下藏有球的杯子总数            那么,知道[i,j]这段区间中,藏有球的 ...

  7. BZOJ 3714: [PA2014]Kuglarz

    Description 魔术师的桌子上有n个杯子排成一行,编号为1,2,-,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯子,你就可以获得奖品.花费c_ij元,魔术师就会告诉你杯子i,i+ ...

  8. 洛谷 P4106 / bzoj 3614 [ HEOI 2014 ] 逻辑翻译 —— 思路+递归

    题目:https://www.luogu.org/problemnew/show/P4106 https://www.lydsy.com/JudgeOnline/problem.php?id=3614 ...

  9. bzoj 3714

    题意:n<=2000的盒子,有一些里面有球,再给你所有c[i][j](1<=i<=j<=n),即告诉你[i,j]里面球的总数的奇偶性需要花费c[i][j],现在求知道所有的盒子 ...

随机推荐

  1. [Go]GOPATH相关知识点

    在成功安装好Go之后,执行命令 go env 就可以看到有关go的一些环境变量,其中比较关键的是GOROOT.GOPATH和 GOBIN 1.设置GOPATH环境变量有什么意义? GOPATH是指:指 ...

  2. poj2553 有向图缩点,强连通分量。

    //求这样的sink点:它能达到的点,那个点必能达到他,即(G)={v∈V|任意w∈V:(v→w)推出(w→v)} //我法:tarjan缩点后,遍历点,如果该点到达的点不在同一个强连通中,该点排除, ...

  3. .NET Core 3.0之深入源码理解Configuration(一)

    Configuration总体介绍 微软在.NET Core里设计出了全新的配置体系,并以非常灵活.可扩展的方式实现.从其源码来看,其运行机制大致是,根据其Source,创建一个Builder实例,并 ...

  4. SQL Server vNext CTP 1.2

    https://msdn.microsoft.com/en-us/library/mt788653.aspx

  5. datasnap中间件如何控制长连接的客户端连接?

    ActiveConnections: TClientDataSet; ... 有客户端连接上来的时候 procedure TForm8.DSServer1Connect(DSConnectEventO ...

  6. C++ std::tr1::bind使用

    1. 简述 同function函数相似.bind函数相同也能够实现相似于函数指针的功能.但却却比函数指针更加灵活.特别是函数指向类 的非静态成员函数时.std::tr1::function 能够对静态 ...

  7. [教程]Delphi 中三种回调函数形式解析

    Delphi 支持三种形式的回调函数 全局函数这种方式几乎是所有的语言都支持的,类的静态函数也可以归为此类,它保存的只是一个函数的代码起始地址指针( Pointer ).在 Delphi 中声明一般为 ...

  8. 【转】JavaScript错误处理和堆栈追踪

    原文: https://www.cnblogs.com/caoru/p/6699583.html --------------------------------------------------- ...

  9. 设计模式之解释器模式(Interpreter)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  10. Java经常使用日期操作具体解释

    Date类型大多数时间分量计算方法已经被Calendar代替 Date经常用法setTime getTime() new Date();默认获取当前的时间 SimpleDateFormat用来格式化和 ...