【题目链接】

           点击打开链接
【算法】
           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)

#include<bits/stdc++.h>
using namespace std;
#define MAXN 2010 struct info
{
int u,v;
long long w;
} e[MAXN*MAXN]; int n,i,j,tot;
long long ans,c; bool cmp(info a,info b)
{
return a.w < b.w;
}
class DisjointSet
{
private :
int fa[MAXN];
public :
inline void init(int n)
{
int i;
for (i = ; i <= n; i++) fa[i] = i;
}
inline int get_root(int x)
{
if (fa[x] == x) return x;
return fa[x] = get_root(fa[x]);
}
inline void merge(int u,int v)
{
fa[get_root(u)] = get_root(v);
}
} s;
inline void kruskal()
{
int i,sx,sy;
for (i = ; i <= tot; i++)
{
sx = s.get_root(e[i].u);
sy = s.get_root(e[i].v);
if (sx != sy)
{
ans += e[i].w;
s.merge(e[i].u,e[i].v);
}
}
}
int main()
{ scanf("%d",&n);
for (i = ; i <= n; i++)
{
for (j = i; j <= n; j++)
{
scanf("%lld",&c);
e[++tot] = (info){i-,j,c};
}
}
s.init(n);
sort(e+,e+tot+,cmp);
kruskal();
printf("%lld\n",ans); return ;
}

【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网络爬虫开发实战] 1.3.2-Beautiful Soup的安装

    Beautiful Soup是Python的一个HTML或XML的解析库,我们可以用它来方便地从网页中提取数据.它拥有强大的API和多样的解析方式,本节就来了解下它的安装方式. 1. 相关链接 官方文 ...

  2. 使用 PHP + shell 生成 一键设置权限的脚本。

    linux 系统 支持PHP脚本一键设置环境.shell脚本一键设置环境.那么 我今天 使用 PHP  + shell 生成 一键设置权限的脚本. 举例子:linux服务器 一键配置discuz网站环 ...

  3. android 如何从activity跳转到另一个activity下指定的fragment

    思路: 跳转到目标fragment所在的activity,并传递一个flag,来确定要到哪个fragment,根据该flag判断后,跳转到指定的fragment即可. 代码: 当前界面: intent ...

  4. 将cocos2dx 2.x.x从eclipse转移到Android Studio遇到的问题

    cocos2dx 2.x.x从eclipse转移到Android Studio遇到的问题 可能我用不太习惯Android Studio才会遇到这么多问题,让老手们见笑了. cocos2dx的最新版本, ...

  5. TestNG 练习

    java文件 package selniumhomework; import org.testng.annotations.Test; public class Test1 { @Test(group ...

  6. PatentTips – EMC Virtual File System

    BACKGROUND OF THE INVENTION 1. Field of the Invention The present invention generally relates to net ...

  7. QQ5.0侧滑

    package com.example; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; impo ...

  8. Thinkphp5.0 的视图view的模板布局

    Thinkphp5.0 的视图view的模板布局 使用include,文件包含: <!-- 头部 --> <div class="header"> {inc ...

  9. [bzoj4712]洪水_动态dp

    洪水 bzoj-4712 题目大意:给定一棵$n$个节点的有根树.每次询问以一棵节点为根的子树内,选取一些节点使得这个被询问的节点包含的叶子节点都有一个父亲被选中,求最小权值.支持单点修改. 注释:$ ...

  10. 深入理解hadoop(二)

    hadoop RPC 网络通信是hadoop的核心模块之一,他支撑了整个Hadoop的上层分布式应用(HBASE.HDFS.MapReduce), Hadoop RPC具有以下几个特性,透明性(用户本 ...