zoukankan      html  css  js  c++  java
  • 最小生成树 BZOJ3714 [PA2014]Kuglarz

    3714: [PA2014]Kuglarz

    Time Limit: 20 Sec  Memory Limit: 128 MB
    Submit: 701  Solved: 394
    [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

    Sample Output

    7

    HINT

     

    Source

    鸣谢Jcvb

    搞清点的数目!!!

    不会写Prim的蒟蒻

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int n,cnt,tot;
     7 long long ans;
     8 int fa[2010];
     9 struct data{
    10     int x,y,dis;
    11 }edge[2000010];
    12 bool cmp(const data&aa,const data&bb){
    13     return aa.dis<bb.dis;
    14 }
    15 int find(int x){
    16     if(fa[x]==x) return x;
    17     return find(fa[x]);
    18 }
    19 int main(){
    20     scanf("%d",&n);
    21     int a=0;
    22     for(int i=1;i<=n;i++)
    23         for(int j=i;j<=n;j++){
    24             scanf("%d",&a);
    25             edge[++cnt].x=i-1;
    26             edge[cnt].y=j;
    27             edge[cnt].dis=a;
    28         }
    29     sort(edge+1,edge+cnt+1,cmp);
    30     for(int i=1;i<=n;i++) fa[i]=i;
    31     int f1=0,f2=0;
    32     for(int i=1;i<=cnt;i++){
    33         f1=find(edge[i].x);
    34         f2=find(edge[i].y);
    35         if(f1!=f2){
    36             ans+=(long long)edge[i].dis;
    37             tot++;
    38             fa[f1]=f2;
    39         }
    40         if(tot==n) break;
    41     }
    42     printf("%lld",ans);
    43     return 0;
    44 }
  • 相关阅读:
    Day15模块(导入,使用)
    day14 迭代器,生成器,函数的递归调用
    Day13有参装饰器,三元表达式,匿名函数
    re模块
    Day12装饰器
    subprocess模块windows系统命令和linux系统命令
    Day11名称空间,作用域,闭包函数
    识别 Linux上的设备(磁盘)类型
    Linux lsblk和df命令区别
    Linux远程拷贝scp
  • 原文地址:https://www.cnblogs.com/zwube/p/7077651.html
Copyright © 2011-2022 走看看