【题目链接】

           点击打开链接
【算法】
           sum[i]表示前i个杯子中,杯子底下藏有球的杯子总数
           那么,知道[i,j]这段区间中,藏有球的杯子总数的奇偶性,相当于知道sum[j] - sum[i-1]的奇偶性
           我们发现,知道哪些杯子底下藏有球,就是需要我们知道所有sum[i]的奇偶性
           因此,我们只需将所有的(i-1,j)连边,边权为输入数据中给出的费用c(i,j),然后,求出这个图的最小
           生成树,即可
【代码】
           笔者这题求最小生成树使用的是kruskal算法,不过,事实上prim算法可以达到更优的复杂度,kruskal的

时间复杂度是O(n^2log(n)),而prim的时间复杂度是O(n^2)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define MAXN 2010
  4.  
  5. struct info
  6. {
  7. int u,v;
  8. long long w;
  9. } e[MAXN*MAXN];
  10.  
  11. int n,i,j,tot;
  12. long long ans,c;
  13.  
  14. bool cmp(info a,info b)
  15. {
  16. return a.w < b.w;
  17. }
  18. class DisjointSet
  19. {
  20. private :
  21. int fa[MAXN];
  22. public :
  23. inline void init(int n)
  24. {
  25. int i;
  26. for (i = ; i <= n; i++) fa[i] = i;
  27. }
  28. inline int get_root(int x)
  29. {
  30. if (fa[x] == x) return x;
  31. return fa[x] = get_root(fa[x]);
  32. }
  33. inline void merge(int u,int v)
  34. {
  35. fa[get_root(u)] = get_root(v);
  36. }
  37. } s;
  38. inline void kruskal()
  39. {
  40. int i,sx,sy;
  41. for (i = ; i <= tot; i++)
  42. {
  43. sx = s.get_root(e[i].u);
  44. sy = s.get_root(e[i].v);
  45. if (sx != sy)
  46. {
  47. ans += e[i].w;
  48. s.merge(e[i].u,e[i].v);
  49. }
  50. }
  51. }
  52. int main()
  53. {
  54.  
  55. scanf("%d",&n);
  56. for (i = ; i <= n; i++)
  57. {
  58. for (j = i; j <= n; j++)
  59. {
  60. scanf("%lld",&c);
  61. e[++tot] = (info){i-,j,c};
  62. }
  63. }
  64. s.init(n);
  65. sort(e+,e+tot+,cmp);
  66. kruskal();
  67. printf("%lld\n",ans);
  68.  
  69. return ;
  70. }

【PA 2014】Kuglarz的更多相关文章

  1. 【AMPPZ 2014】 The Captain

    [题目链接] 点击打开链接 [算法] 按x轴排序,将相邻点连边 按y轴排序,将相邻点连边 然后对这个图跑最短路就可以了,笔者用的是dijkstra算法 [代码] #include<bits/st ...

  2. 【JSOI 2014】序列维护

    [题目链接] 点击打开链接 [算法] 线段树 注意标记下传 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 5 ...

  3. 【SDOI 2014】 旅行

    [题目链接] 点击打开链接 [算法] 树链剖分 每个宗教建一棵线段树,注意数据量大,要动态开点 [代码] #include<bits/stdc++.h> using namespace s ...

  4. 【TJOI 2014】 上升子序列

    [题目链接] 点击打开链接 [算法] 先考虑50分的做法 : f[i]表示以i结尾的本质不同的上升子序列的个数 则f[i] = sigma(f[j]) (j < i,a[j] < a[i] ...

  5. 【LNOI 2014】 LCA

    [题目链接] 点击打开链接 [算法] 考虑求lca(x,y)的深度 我们可以将从根到x路径上的点都打上标记,然后,询问y到根上路径的权值和 那么,求sigma(depth(lca(i,z)))(l & ...

  6. 【JLOI 2014】 松鼠的新家

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3631 [算法] 树上差分 [代码] #include<bits/stdc++. ...

  7. 【NOI 2014】 动物园

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3670 [算法] KMP [代码] #include<bits/stdc++.h ...

  8. 【BZOJ 3876】【AHOI 2014】支线剧情

    http://www.lydsy.com/JudgeOnline/problem.php?id=3876 这道题每条支线的意思是每条边... 那么每条边的下界设为1就行了. 这样建出一个DAG,每条边 ...

  9. 【UOJ #29】【IOI 2014】holiday

    http://uoj.ac/problem/29 cdq四次处理出一直向左, 一直向右, 向左后回到起点, 向右后回到起点的dp数组,最后统计答案. 举例:\(fi\)表示一直向右走i天能参观的最多景 ...

随机推荐

  1. [Python3网络爬虫开发实战] 7.1-Selenium的使用

    Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击.下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬.对于一些JavaScript动态渲染的页面来说 ...

  2. ruby 第五次作业 part 1(分类、排序)

    movies_controller.rb class MoviesController < ApplicationController def movie_params params.requi ...

  3. 集训第五周动态规划 D题 LCS

    Description In a few months the European Currency Union will become a reality. However, to join the ...

  4. Lucene_Hello(示例)

    (1)创建project (2)导入Lucene的核心包 (3)编写代码建立索引 /lucene01/src/cn/hk/lucene/TestIndex.java: package cn.hk.lu ...

  5. 【01】《响应式Web设计:HTML5和CSS3实战》

    [01]   (魔芋:已看完.) [01]<响应式Web设计:HTML5和CSS3实战>(全).pdf 共246页.   2013年1月出版.   读后感:适合入门的书籍,对于响应式布局, ...

  6. C# 3.0特性

    C# 3.0的扩展特性主要包括以下几点,我们在后面也会按照这个顺序进行介绍:1.隐式局部变量(implicitly typed local variables),通过初始化该局部变量的表达式自动推断出 ...

  7. spark streaming 踩过的那些坑

      系统背景 spark streaming + Kafka高级API receiver 目前资源分配(现在系统比较稳定的资源分配),独立集群 --driver-memory 50G   --exec ...

  8. zoj4710暴力

    #include<stdio.h> #include<string.h> #define N 110 int map[N][N]; int main() { int n,m,k ...

  9. 新vim配置文件

    "******************************************************特殊设置************************************ ...

  10. C#高级编程第9版 第一章 .NET体系结构 读后笔记

    .NET的CLR把源代码编译为IL,然后又把IL编译为平台专用代码. IL总是即时编译的,这一点的理解上虽然明白.当用户操作C#开发的软件时,应该是操作已经编译好的程序.那么此时安装在客户机上的程序是 ...