bzoj 3714: [PA2014]Kuglarz
3714: [PA2014]Kuglarz
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1151 Solved: 611
[Submit][Status][Discuss]
Description
魔术师的桌子上有n个杯子排成一行,编号为1,2,…,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯子,你就可以获得奖品。花费c_ij元,魔术师就会告诉你杯子i,i+1,…,j底下藏有球的总数的奇偶性。
采取最优的询问策略,你至少需要花费多少元,才能保证猜出哪些杯子底下藏着球?
Input
第一行一个整数n(1<=n<=2000)。
第i+1行(1<=i<=n)有n+1-i个整数,表示每一种询问所需的花费。其中c_ij(对区间[i,j]进行询问的费用,1<=i<=j<=n,1<=c_ij<=10^9)为第i+1行第j+1-i个数。
Output
输出一个整数,表示最少花费。
Sample Input
5
1 2 3 4 5
4 3 2 1
3 4 5
2 1
5
1 2 3 4 5
4 3 2 1
3 4 5
2 1
5
Sample Output
7
HINT
Source
我们可以发现,当我们知道了[a,b]和[b+1,c]之后,就可以知道[a,c];
同样的,当我们知道了[a,c]和[b,c]之后也就可以知道了[a,b-1]。
或者换一个更加显然的说法,设空间i为i物品左边的空当,空间n+1为n右边的空当。
我们查询一次[l,r]就相当于知道了空当[l,r+1]直接的物品的奇偶性。
当我们知道了空当[a,b]和[b,c]之后就可以知道[a,c];
当我们知道了空当[a,c]和[b,c]之后就可以知道[a,b]。
所以一次操作[l,r]就相当于吧l于r+1所在的等价类集合合并。。。
然后就发现这个的本质是一道最小生成树。。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | /************************************************************** Problem: 3714 User: JYYHH Language: C++ Result: Accepted Time:9172 ms Memory:24796 kb ****************************************************************/ #include<bits/stdc++.h> #define ll long long #define maxn 2005 using namespace std; struct lines{ int u,v,w; bool operator <( const lines &u) const { return w<u.w; } }l[maxn*1000]; ll ans=0; int n,m,cnt=0; int now,p[maxn]; int ff( int x){ return p[x]==x?x:(p[x]=ff(p[x])); } int main(){ scanf ( "%d" ,&n); n++; for ( int i=1;i<n;i++) for ( int j=i+1;j<=n;j++){ scanf ( "%d" ,&now); l[++cnt]=(lines){i,j,now}; } for ( int i=1;i<=n;i++) p[i]=i; int fa,fb,tot=0; sort(l+1,l+cnt+1); for ( int i=1;i<=cnt;i++){ fa=ff(l[i].u),fb=ff(l[i].v); if (fa!=fb){ ans+=(ll)l[i].w; p[fa]=fb; if ((++tot)==n-1) break ; } } cout<<ans<<endl; return 0; } |
我爱学习,学习使我快乐
标签:
最小生成树
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术