P2770【USACO 2014 January Gold】难度系数

问题描述

奶牛冬奥会的越野滑雪场可以被看做是一个M x N(1 <= M,N <= 500)的网格区域。其中每格都有一个海拔高度(海拔高度的范围:0 .. 1,000,000,000)。其中一些格子被设计成了滑雪的起点,赛会组织者想要给每个滑雪起点做一个难度的评级。
一个起点P的难度系数D应该尽可能小,使得一只奶牛能够成功的滑过至少T(1 <= T <= MN)个格子。如果奶牛从P出发,它只能朝相邻的格子滑行,且要求相邻的格子的海拔高度差的绝对值不超过D。请帮助组织者计算出每个起点的难度系数。

输入格式

第一行,三个整数M, N, 和 T
接下来是一个M x N的整数矩阵,表示每个格子的海拔高度
接下来是一个M x N的矩阵,矩阵由数字0和1构成,数字1表示该处是一个起点。

输出格式

一个整数,表示所有起点的难度系数总和(可能超过int范围)

样例输入

3 5 10
20 21 18 99 5
19 22 20 16 17
18 17 40 60 80
1 0 0 0 0
0 0 0 0 0
0 0 0 0 1

样例输出

24

首先我们要理解一个起点的难度系数是指:从该起点出发经过的相邻的两点的高度差的最大值。
同时我们注意到每个点是可以反复经过的,并且反复经过不会影响难度系数。
因此我们可以发现,对于一个起点,它最后经过的所有的点必然是一个联通块。我们定义两点之间的边的权值等于他们的高度差。那么一个起点的难度系数就是它所在联通块中最大的边权。

我们考虑将所有的边按照权值从小到大排序,将Kruscal算法修改一下。
每次选出权值最小的边,合并它连接的两个联通块,如果合并后的大联通块包含的点数大于等于T,并且小联通块各自包含的点数小于T,那么ans+=小联通块中起点数*当前边的权值。

正确性是显然的。


代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#define Abs(a,b) ((a>b)?(a-b):(b-a))
#define N 505
#define M 500005
using namespace std;
struct node{int x,y,z;}edge[M];
bool cmp(node a,node b)
{return a.z<b.z;}
int m,n,t,map[N][N],Map[N][N],id[N][N],F[M],size[M],p[M],tot,TOT,cnt;
long long ans;
int GF(int v)
{if(F[v]!=v)F[v]=GF(F[v]);return F[v];
}
int main()
{int i,j,x,y,k;scanf("%d%d%d",&m,&n,&t);for(i=1;i<=m;i++)for(j=1;j<=n;j++)scanf("%d",&map[i][j]);for(i=1;i<=m;i++)for(j=1;j<=n;j++){scanf("%d",&Map[i][j]);cnt+=Map[i][j];//cnt表示起点总数}for(i=1;i<=m;i++)for(j=1;j<=n;j++){id[i][j]=++tot;size[tot]=Map[i][j];//size记录起点数}for(i=1;i<=m;i++)for(j=1;j<=n;j++){if(i!=m){TOT++;edge[TOT].x=id[i][j];edge[TOT].y=id[i+1][j];edge[TOT].z=Abs(map[i][j],map[i+1][j]);}if(j!=n){TOT++;edge[TOT].x=id[i][j];edge[TOT].y=id[i][j+1];edge[TOT].z=Abs(map[i][j],map[i][j+1]);}}sort(edge+1,edge+TOT+1,cmp);for(i=1;i<=tot;i++)F[i]=i,p[i]=1;//p记录总点数i=1;while(cnt&&i<=TOT){x=GF(edge[i].x);y=GF(edge[i].y);if(x!=y){if(p[x]+p[y]>=t){if(p[x]<t)ans+=1ll*size[x]*edge[i].z,cnt-=size[x];if(p[y]<t)ans+=1ll*size[y]*edge[i].z,cnt-=size[y];}F[x]=y;size[y]+=size[x];p[y]+=p[x];}i++;}cout<<ans;
}

NKOJ 2770 难度系数(最小生成树)相关推荐

  1. P2770【USACO 2014 January Gold】难度系数

    问题描述 奶牛冬奥会的越野滑雪场可以被看做是一个M x N(1 <= M,N <= 500)的网格区域.其中每格都有一个海拔高度(海拔高度的范围:0 .. 1,000,000,000). ...

  2. 2021年高考英语卷三成绩查询,2021年全国3卷高考外语卷难不难,今年全国3卷高考外语卷难度系数点评...

    2020年全国3卷高考外语试卷高考命题大纲,与2018年.2019年全国3卷外语卷相比,在考核目标.考试范围与要求等方面基本没有大的变化,增加了一些细节要求和知识点的考察,所以2020年全国3卷高考外 ...

  3. 区块链和java哪个更难_java 区块链中设计合理的难度系数

    难度系数的概念 区块链的难度系数:是设计区块链挖矿难易的关键因子,难度系数越低,挖矿越容易.难度系数越高,相应越难.例如比特币的难度系数是18. 难度系数一般是hash值的前置0的个数. java 区 ...

  4. access统计班级人数_7省新高考选科统计出炉!学科难度系数排行再度爆冷

    多年以来,中国实行的高考政策普遍是3+X模式,即三大学科:数学.英语.语文, X则指的是理科或者文科. 新高考改革中,部分省份采用的模式变成了3+3模式,也就是不分文理科,除过三门必选科目之外,可以从 ...

  5. java定义文章的难度系数

    本文定义文章的难度系数为:平均句长难度系数+常用字难度系数. 思路: (1)统计文章中.!?的数量来确定句子数,句子数除以总字符数即为平均句长,即可得到一个测评标准(句长): (2)保存一个常用500 ...

  6. 高尔夫球场难度系数_在高尔夫球场上表现出色

    高尔夫球场难度系数 I'd need wider columns to hold my golf scores, but this Excel template for golf scores mig ...

  7. java实现区块链中的区块hash难度系数的设计

    区块链的难度系数:是设计区块链挖矿难易的关键因子,难度系数越低,挖矿越容易.难度系数越高,相应越难.例如比特币的难度系数是18. 难度系数一般是hash值的前置0的个数. java 区块链中设计合理的 ...

  8. java和区块链哪个难_java 区块链中设计合理的难度系数

    区块链的难度系数:是设计区块链挖矿难易的关键因子,难度系数越低,挖矿越容易.难度系数越高,相应越难.例如比特币的难度系数是18. 难度系数一般是hash值的前置0的个数. java 区块链中设计合理的 ...

  9. 计算机类专业学习难度排行,全国33所名校计算机专业考研跨考难度系数排名

    计算机系统结构前20名(总共47所高校) 1.清华大学,2.华中科技大学,3.西安交通大学,4.上海交通大学,5.浙江大学,6.西安电子科技大学,7.武汉大学,8.复旦大学,9.哈尔滨工业大学,10. ...

最新文章

  1. linux系统编程需要什么,若想成为一名Linux下编程高手,必须能对各种系统调用有透彻的了解...
  2. python2和python3分别是python的两个版本_Windows下Python2与Python3两个版本共存的方法详解...
  3. Spring mvc PostgreSQL 插入timestamp和int8
  4. easyui 中combogrid 实现多选,反选效果
  5. js里面字符数字和数字相加_「译」5 个奇怪的只会在 JS 里才发生的趣事
  6. 从零开始配置服务器密码机的开发环境
  7. 防止误删的神器-ECS实例删除保护
  8. 基于JAVA+SpringBoot+Mybatis+MYSQL的旅游信息管理系统
  9. logback日志配置文件
  10. 100位量子计算机算力,量子算力争霸再迎赛点:谷歌称瞄准新纪录!
  11. Android 加载Webview链接类型的Youtube视频
  12. matlab 质心,Matlab中三点确定质心
  13. SpringCloud 统一网关Gateway -- 为什么需要网关、Gateway快速入门、路由断言工厂(Route Predicate Factory)
  14. The server encountered an internal error that prevented it from fulfilling this request.解决方法
  15. 微信小程序开发案例分享-必背诗:从0到1,从前端到数据库
  16. GIC spec之ITS和LPI中断1
  17. matlab他励直流电机,他励直流电机制动过程的MATLAB分析
  18. python降低图片分辨率_手把手:扫描图片又大又不清晰?这个Python小程序帮你搞定!...
  19. 【STM32F411RE和L610物联网入门学习笔记】
  20. DataOps、MLOps 和 AIOps,你要的是哪个Ops?

热门文章

  1. 网络安全从业者超全书单推荐
  2. unicode计算机通用解码语言
  3. Feng Shui POJ - 3384
  4. Linux迁移home目录到根目录的操作步骤
  5. 【生产者消费者模型】
  6. centos7 卸载docker
  7. 企业级别应用--GFS分布式文件系统(GlusterFS工作原理、弹性 HASH 算法 、GlusterFS卷的类型、 部署GlusterFS)
  8. Latex排版[1]:输入矩阵(latex如何输入矩阵、对角阵、方程组)
  9. Win7不激活会怎么样 Win7可以不用激活吗
  10. oracle导入指定字符集入,EXP/IMP 与 字符集、导入导出等