bzoj3714 [PA2014]Kuglarz(贪心+并查集)
来源:互联网 发布:人力资源师网络课程 编辑:程序博客网 时间:2024/06/06 20:47
显然如果要知道所有球的位置,需要知道所有的前缀和的奇偶性。而我们知道了x到y的奇偶性,就是知道了sum[y]-sum[x-1]的奇偶性,我们可以贪心的每次把花费最小的一次询问问了,然后把知道的两个sum合并到一个集合,就像建最小生成树那样。
#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 2010#define pa pair<int,int>inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int n,m=0,fa[N];ll ans=0;struct edge{ int x,y,val;}e[N*N];inline void add(int x,int y,int val){ e[++m].x=x;e[m].y=y;e[m].val=val;}inline bool cmp(edge x,edge y){ return x.val<y.val;}inline int find(int x){ return x==fa[x]?x:fa[x]=find(fa[x]); }int main(){// freopen("a.in","r",stdin); n=read(); for(int i=1;i<=n;++i) for(int j=i;j<=n;++j) add(i-1,j,read()); sort(e+1,e+m+1,cmp); for(int i=0;i<=n;++i) fa[i]=i; for(int i=1;i<=m;++i){ int xx=find(e[i].x),yy=find(e[i].y); if(xx!=yy){ fa[xx]=yy;ans+=e[i].val; } } printf("%lld\n",ans); return 0;}
阅读全文
0 0
- bzoj3714 [PA2014]Kuglarz(贪心+并查集)
- 【BZOJ3714】【PA2014】Kuglarz(最小生成树)
- bzoj3714【PA2014】Kuglarz
- 【PA2014】【BZOJ3714】Kuglarz
- BZOJ3714 [PA2014]Kuglarz
- BZOJ3714 [PA2014]Kuglarz
- bzoj3714: [PA2014]Kuglarz
- 【bzoj3714】[PA2014]Kuglarz
- bzoj3714 [PA2014]Kuglarz
- 【BZOJ3714】【PA2014】Kuglarz
- bzoj3714: [PA2014]Kuglarz
- BZOJ3714: [PA2014]Kuglarz
- 【bzoj3714】【PA2014】【Kuglarz】【最小生成树】
- 最小生成树 BZOJ3714 [PA2014]Kuglarz
- 【bzoj3714: [PA2014]Kuglarz】转化 ---最小生成树
- 3714: [PA2014]Kuglarz|贪心|思路题
- 【BZOJ 3714】 [PA2014]Kuglarz
- 3714: [PA2014]Kuglarz
- 谈谈final, finally, finalize的区别
- JVM系列五:JVM监测&工具[整理中]
- abstract class和interface有什么区别?
- Linux的一些常用指令
- sleep() 和 wait() 有什么区别?
- bzoj3714 [PA2014]Kuglarz(贪心+并查集)
- 人生几宝
- 10年程序员总结的20几条经验教训
- 配置WebLogic的详细步骤
- mysql 获取当前日期及格式化
- 互联网最有价值行业分析
- 微分dx、dy是无穷小吗?
- 浅谈Java的学习
- 反射