bzoj3714: [PA2014]Kuglarz
来源:互联网 发布:ipad能刷windows系统吗 编辑:程序博客网 时间:2024/06/06 18:08
这题真是妙啊,只要知道所有所有[1,i]的和就能确定最后的值,当我们知道sum[i-1],询问一次[i,j],就知道了sum[j],这样我们可以用最小生成树来解决问题。对于[i,j],连一条从i-1到j的边。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0,x=1; while(ch<'0'||ch>'9'){if(ch=='-') x=-1;ch=getchar();} while(ch>='0'&&ch<='9'){f=(f<<1)+(f<<3)+ch-'0';ch=getchar();} return f*x;}struct data{ int x; int y; int val;}a[4000005];inline bool cmp(const data &x,const data &y){ return x.val<y.val;}int fa[4005],tot;long long ans;int find(int x){ return fa[x]==x?x:fa[x]=find(fa[x]);}int main(){ int n=read(); for(int i=0;i<=n;i++) fa[i]=i; for(int i=1;i<=n;i++) { for(int j=i;j<=n;j++) { a[++tot].x=i-1; a[tot].y=j; a[tot].val=read(); } } sort(a+1,a+tot+1,cmp); for(int i=1;i<=tot;i++) { int fx=find(a[i].x),fy=find(a[i].y); if(fx!=fy) { tot++; ans+=a[i].val; fa[fx]=fy; if(tot==n) break; } } cout<<ans;}
阅读全文
0 0
- 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(最小生成树)
- 【bzoj3714: [PA2014]Kuglarz】转化 ---最小生成树
- bzoj3714 [PA2014]Kuglarz(贪心+并查集)
- 【BZOJ 3714】 [PA2014]Kuglarz
- 3714: [PA2014]Kuglarz
- 3714: [PA2014]Kuglarz
- 微信小程序——常用组件
- topic和service的区别
- 编译php
- echarts异步加载多组数据
- 相似三角形
- bzoj3714: [PA2014]Kuglarz
- 日历界面实现(一次输出三个月)
- Caffe之具体运行流程分析
- IT求职部分网站汇总
- spring-data知识点记载
- golang cannot assign to
- HDU 1719 Friend(规律)
- iOS:tableView刷新闪烁问题解决
- Construct2 游戏进阶制作