【bzoj3714: [PA2014]Kuglarz】转化 ---最小生成树
2017-12-05 20:14
441 查看
3714: [PA2014]Kuglarz
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 967 Solved: 537
[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
51 2 3 4 5
4 3 2 1
3 4 5
2 1
5
Sample Output
7容易知道,最少需要询问n次才能保证猜出答案。
我们如果知道了从第一个位置到第n个位置的奇偶性,那就能确定出小球在哪些杯子下面了。
我们把一次询问c[i][j]看成已经知道了从第一个位置到第i--1个位置的奇偶性了,现在询问一次就知道了从第一个位置到第j个位置的奇偶性,所以我们把该询问转化为一条i-1到j的边,那我们的任务就是把第0个位置,第1个位置....第n个位置的奇偶性找出来(我们初始的时候就是只知道第0个位置的奇偶性(为0,就是为偶数)),便转化为了用n条边把n+1个点连接起来。就是最小生成树了。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#define ll long long
#define INF (ll)1e16
#define N 2005
using namespace std;
int fa
,n,k,c,num,cnt;
ll ans;
struct he{
int l,r,c;
}a[N*N];
bool cmp(he a,he b){
return a.c<b.c;
}
int gf(int x){
if(x==fa[x]) return x;
return fa[x]=gf(fa[x]);
}
bool check(int x){
int u=gf(a[x].l),v=gf(a[x].r);
if(u==v) return false;
fa[u]=v;
return true;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
scanf("%d",&c);
cnt++;
a[cnt].l=i-1;a[cnt].r=j;a[cnt].c=c;
}
}
sort(a+1,a+1+cnt,cmp);
for(int i=0;i<=n;i++) fa[i]=i;
for(int i=1;i<=cnt;i++)
if(check(i)){
num++;
ans+=a[i].c;
if(num==n) break;
}
printf("%lld\n",ans);
}
相关文章推荐
- BZOJ3714 [PA2014]Kuglarz 【最小生成树】
- 最小生成树 BZOJ3714 [PA2014]Kuglarz
- 【BZOJ3714】【PA2014】Kuglarz(最小生成树)
- 【kruscal】【最小生成树】【并查集扩展】bzoj3714 [PA2014]Kuglarz
- BZOJ 3714: [PA2014]Kuglarz(最小生成树)
- bzoj 3714: [PA2014]Kuglarz【最小生成树】
- 【bzoj3714】【PA2014】【Kuglarz】【最小生成树】
- 【BZOJ 3714】[PA2014]Kuglarz 最小生成树
- 【BZOJ3714】【PA2014】Kuglarz(最小生成树)
- 【BZOJ3714】[PA2014]Kuglarz 最小生成树
- BZOJ 3714 [PA2014]Kuglarz - 最小生成树模型
- bzoj 3714: [PA2014]Kuglarz 最小生成树
- 【BZOJ】【P3714】【PA2014】【Kuglarz】【题解】【最小生成树】
- bzoj3714 [PA2014]Kuglarz(贪心+并查集)
- bzoj 3714: [PA2014]Kuglarz
- 3714: [PA2014]Kuglarz 思路题 最小生成树
- [BZOJ3714][PA2014]Kuglarz
- [BZOJ3714][PA2014]Kuglarz(MST)
- bzoj3714: [PA2014]Kuglarz
- bzoj3714 [PA2014]Kuglarz