zoukankan      html  css  js  c++  java
  • bzoj 3714

    题意:n<=2000的盒子,有一些里面有球,再给你所有c[i][j](1<=i<=j<=n),即告诉你【i,j】里面球的总数的奇偶性需要花费c[i][j],现在求知道所有的盒子的状态需要最少花费为多少。。

    思路:PA系列的题目确实不错。

             思路比较有意思但是不难。

             如果知道i,j之间任意两点间的关系以及任意一个盒子的状态,那么很显然i,j之间的所有盒子状态都可以推出来。。那么怎么表示关系呢?

             很容易想到有关系就连一条边,那么就是求[1, n]之间的所有点有关系的最小花费吗?那不就是最小生成树吗?

           具体实现的话在i<->j+1连一条C[i][j]的边,求1->n+1的最小生成树。。

    code:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define Inf 0x3fffffff
     4 #define repf(i, a, b) for (int i = (a); i <= (b); ++i)
     5 const int maxn = 2003;
     6 int c[maxn][maxn], d[maxn], vis[maxn];
     7 int n;
     8 long long mst;
     9 
    10 inline void read(int& ret){
    11     ret = 0;
    12     bool ok = 0;
    13     for( ; ;){
    14         int c = getchar();
    15         if (c >= '0' && c <= '9') ret = (ret << 3) + (ret << 1) + c - '0', ok = 1;
    16         else if (ok) return;
    17     }
    18 }
    19 
    20 void prim(){
    21     mst = 0;
    22     memset(vis, 0, sizeof(vis));
    23     repf(i, 1, n+1) d[i] = c[1][i];
    24     vis[1] = 1;
    25     repf(i, 1, n){
    26         int k = 0, mdis = Inf;
    27         repf(j, 1, n+1) if (!vis[j] && d[j] < mdis)
    28              k = j, mdis = d[j];
    29         vis[k] = 1;
    30         mst += mdis;
    31         repf(j, 1, n+1) if (!vis[j]) 
    32              d[j] = min(c[k][j], d[j]);  
    33     }
    34 }
    35 
    36 int main(){
    37 //    freopen("a.in", "r", stdin);
    38     while (scanf("%d", &n) != EOF){
    39           repf(i, 1, n) repf(j, i+1, n+1){
    40                read(c[i][j]);
    41                c[j][i] = c[i][j];
    42           }
    43           prim();
    44           cout << mst << endl;
    45     }    
    46 }
    View Code
  • 相关阅读:
    Dijkstra(单队优化)
    最短路(hdu4725)(建点巧妙)
    次小生成树
    2019暑假集训DAY1(problem3.play)(单调栈思想)
    平衡树
    线段树区间加乘(模板)
    杜恩德的新博客,都来看看-duende99
    oracle 11g如何完全卸载
    如何连接别人电脑上的Oracle数据库--duende99
    Java中的Filter过滤器
  • 原文地址:https://www.cnblogs.com/yzcstc/p/4073907.html
Copyright © 2011-2022 走看看