BZOJ 3714: [PA2014]Kuglarz
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
输出一个整数,表示最少花费。
题解:
参考小胖的奇偶那道题。
那道题用的并查集维护。
如果知道 i..j 之间奇偶性的话,实际上知道的是 sum[j]-sum[i-1]的奇偶性(sum为前缀和)。
可以用扩展域的并查集维护任意两个sum[i]之间的差值。
有了这个结论,如果全部知道哪些杯底有球,就需要所有的sum之间的关系已知,也就是并查集中所有点都在一个集合中,是一棵树。
所以遍转化成了最小生成树问题。
代码:
Kruskal 10384 ms
#include<cstdio> #include<cstring> #include<algorithm> //by zrt //problem: using namespace std; int n; struct N{ int x,y,w; }map[*]; int tot; bool cmp(N a,N b){ return a.w<b.w; } ]; int get(int x){ return f[x]==x?x:f[x]=get(f[x]); } int main(){ #ifdef LOCAL freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif scanf("%d",&n); ;i<=n;i++){ for(int j=i;j<=n;j++){ scanf("%d",&map[tot].w); map[tot].x=i; map[tot].y=j+; tot++; } } sort(map,map+tot,cmp); ); ;i<=n+;i++) f[i]=i; ;i<tot;i++){ if(get(map[i].x)!=get(map[i].y)){ f[get(map[i].x)]=get(map[i].y); cost+=map[i].w; } } printf("%lld\n",cost); ; }
Prim 16480 ms
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> //by zrt //problem: using namespace std; int n; ][]; struct N{ int x,w; N(,){ x=a,w=b; } friend bool operator < (N a,N b){ return a.w>b.w; } }; priority_queue<N> q; ]; int main(){ #ifdef LOCAL freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif scanf("%d",&n); int x; ;i<=n;i++){ for(int j=i;j<=n;j++){ scanf("%d",&x); val[j+][i]=val[i][j+]=x; } } ); q.push(N(,)); int c; n=n+; while(!q.empty()){ x=q.top().x;c=q.top().w;q.pop(); if(vis[x]) continue; vis[x]=;cost+=c; ;i<=n;i++){ if(!vis[i]){ q.push(N(i,val[x][i])); } } } printf("%lld\n",cost); ; }
BZOJ 3714: [PA2014]Kuglarz的更多相关文章
- bzoj 3714 [PA2014]Kuglarz 最小生成树
[PA2014]Kuglarz Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1335 Solved: 672[Submit][Status][Di ...
- bzoj 3714 [PA2014]Kuglarz——思路+最小生成树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3714 如果用s[ i ]表示前 i 个的奇偶性,那么c(i_j)表示s[ i-1 ]^s[ ...
- bzoj 3714: [PA2014]Kuglarz【最小生成树】
参考:https://blog.csdn.net/aarongzk/article/details/48883741 没想到吧.jpg 来自题解: "如果用sum[i]表示前i个杯子底球的总 ...
- 3714: [PA2014]Kuglarz
3714: [PA2014]Kuglarz 链接 思路: 好题.对于每个点都需要确定它的值,那么一个点可以直接询问[i,i]来确定,或者已经知道了[i,j]和[i+1,j]推出来. 但是可能产生冲突, ...
- 【BZOJ】3714: [PA2014]Kuglarz
题意 \(n(1 \le n \le 2000)\)个数每个数是\(0\)或\(1\),现在可以花费\(c_{i, j}\)知道\([i, j]\)的奇偶性,问将所有数都找出来的最小花费. 分析 如果 ...
- bzoj3714: [PA2014]Kuglarz
[PA2014]KuglarzTime Limit: 20 Sec Memory Limit: 128 MBSubmit: 553 Solved: 317[Submit][Status][Discus ...
- [PA2014]Kuglarz
[PA2014]Kuglarz 题目大意: 有一个长度为\(n(n\le2000)\)的0/1串,你可以花\(c_{i,j}\)的钱,询问区间\([i,j]\)的异或和.问至少要多少元才能知道原来的序 ...
- 【BZOJ3714】[PA2014]Kuglarz 最小生成树
[BZOJ3714][PA2014]Kuglarz Description 魔术师的桌子上有n个杯子排成一行,编号为1,2,…,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯子,你就可以获 ...
- bzoj 3714 [ PA 2014 ] Kuglarz —— 思路+最小生成树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3714 因为每个杯子下最多一个小球,所以从奇偶性就可以看出有没有球: 询问一段区间,等于知道一 ...
随机推荐
- c语言学习的第四天2
上图显示了float和double的精度,精度:就是指数值的精确程度,浮点类型可表示的数值范围很大,但只有几位是精确的,可以通过小 数所占的位数来获取,float小数部分最多能有7位有效数字,但绝对能 ...
- ecshop常用语句
ecshop之中的IF语句: <select name="product_cat" id="product_cat" class="form-c ...
- webshell + xss 猥琐刷某投票
团队成员发来一个投票的地址,需要撸某某网站的一个某某投票,果断看了下,ip限制了,看到post 数据包 额 随便找个大流量shell post 数据 Js代码代码 <script type=&q ...
- xcode编译错误总结
No architectures to compile for(ONLY_ACTIVE_ARCH=YES 这种错误 修改building settings下 Build Active Archi ...
- 19) Java并发
>synchronized synchronized 关键字,它包括两种用法:synchronized 方法和 synchronized 块. 1>synchronized 方法:通过在 ...
- 【Delphi】从内存(MemoryStream)使用WMP(WindowsMediaPlayer)控件播放视频音频(Play Video with WMP from MemoryStream)
关键字: MemoryStream.WMP.WindowsMediaPlayer.Play .Load. Delphi.C++.C#.ActiveX控件 作 者: CaiBirdy 问 题:正常使 ...
- C# A窗口内容显示在B窗口中的方法
HeScripts script = new HeScripts(); //A窗口中实例化B窗口 string okscripts = "test"; //设置字段内容 scrip ...
- js代码优化
1.减少Jquery使用 处理dom遍历和复杂的脚本场景时,jquery可能有很大的帮助,不过在处理简单的.直截了当的代码场景就会迟缓.尽可能的避免jquery对象创建,尤其在循环中. 2.优化循环 ...
- Partitioner没有被调用的情况
map的输出,通过分区函数决定要发往哪个reducer. 有2种情况,我们自定义的Partitioner不会被调用 1) reducer个数为0 这种情况,没有reducer,不需要分区 2) red ...
- MvcAdmin功能介绍
应群友要求做一个介绍(QQ群:159227188) 已经迁移到这里,已经迁移到这里,已经迁移到这里,重要的事情说三遍 http://www.cnblogs.com/RainbowInTheSky/p/ ...