题目链接:https://www.luogu.com.cn/problem/P3101

Slove

这题我们可以尝试建立一个图。

以相邻的两个点建边,边的权值为两个点高度差的绝对值,然后把边按照边权值从小到大排序。

然后就可以愉快地使用并查集了:

一开始将每一个点划分到自己的集合。

每次枚举一条边,判断所枚举的边的两个点是否在同一个集合内,如果在就不管,不在就将这两个节点所处的集合进行合并。

每枚举一条边,如果发现合并后的集合点数已经不少于t个,且合并前有集合的点数小于t,如果以前这个集合里面包含终点,答案就直接加上当前边的权值就好了。

每次集合合并时需要合并的信息有集合大小和集合中是否含起点

Code

#include<bits/stdc++.h>
using namespace std;
struct bian
{
int a,b;
long long c;
}s[1000000];
int cmp(bian xx1,bian xx2)
{
if(xx1.c!=xx2.c)return xx1.c<xx2.c;
else
{
if(xx1.a!=xx2.a)return xx1.a<xx2.a;
else return xx1.b<xx2.b;
}
}
int m,n,t,bcj[1000000],tot=0,lll;
long long mm[1000][1000],num[1000000],siz[1000000],ans=0;
int find(int x)//并查集-找祖宗
{
int zz;
if(bcj[x]==x)zz=x;
else zz=find(bcj[x]);
bcj[x]=zz;
return zz;
}
int main()
{
scanf("%d%d%d",&m,&n,&t);
for(int i=1;i<=m*n*3;i++)bcj[i]=i,siz[i]=1;//预处理
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)cin>>mm[i][j];
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
if(i!=1)s[++tot].a=(i-1)*n+j,s[tot].b=(i-2)*n+j,s[tot].c=abs(mm[i][j]-mm[i-1][j]);
if(j!=1)s[++tot].a=(i-1)*n+j,s[tot].b=(i-1)*n+j-1,s[tot].c=abs(mm[i][j]-mm[i][j-1]);
}
//建边
sort(s+1,s+tot+1,cmp);//排序
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&lll);
if(lll==1)num[(i-1)*n+j]=1;//给起点打上标记(第i行第j列的点编号为((i-1)*n+j))
}
for(int i=1;i<=tot;i++)
{
int fa=find(s[i].a),fb=find(s[i].b);
if(fa==fb)continue;//在同一个集合中
if(siz[fa]+siz[fb]>=t)//判断集合是否满足条件
{
if(siz[fa]<t)ans+=s[i].c*num[fa];
if(siz[fb]<t)ans+=s[i].c*num[fb];
}
num[fa]+=num[fb],siz[fa]+=siz[fb],bcj[fb]=fa;//合并信息
}
cout<<ans<<endl; return 0;
}

[USACO14JAN]Ski Course Rating G的更多相关文章

  1. [USACO14JAN]滑雪等级Ski Course Rating

    题目描述 The cross-country skiing course at the winter Moolympics is described by an M x N grid of eleva ...

  2. BZOJ 3430: [Usaco2014 Jan]Ski Course Rating(并查集+贪心)

    题面 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 136 Solved: 90 [Submit][Status][Discuss] Descript ...

  3. [USACO09OPEN]Ski Lessons

    嘟嘟嘟 先考虑这两点: 1.如果我们有结束时间相同的课程,且达到的能力相同,那么我们一定选择开始时间最晚的. 2.如果有能力值相同的滑雪坡,我们一定选择时间最短的. 因此先预处理两个数组.cla[i] ...

  4. Atcoder Rating System

    来翻译一下官方文档,但是建议看英文原文,本文可能会出现一些错误,只是为了方便自己查阅用的. 对于你的每一场rated比赛,会有一个Performance值\(X_i\),你的rating是\(X_i- ...

  5. BZOJ-USACO被虐记

    bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就 ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. Entity Framework 6 Recipes 2nd Edition(10-10)译 - &gt; 为TPH继承的插入、更新、删除操作映射到存储过程

    10-10. 为TPH继承的插入.更新.删除操作映射到存储过程 问题 TPH继承模型,想把它的插入.修改.删除操作映射到存储过程 Solution 假设数据库有一个描述不同种类的产品表(Product ...

  8. 《HeadFirst SQL》笔记

    规范化 0 约束 1 原子性 2 第一范式 1NF 3 数据模式 4 依赖 5 联接查询 6 交叉联接(AKA 笛卡尔联接,叉积) 7 内联接 8 子查询 9 外联接 10 自联接 11 集合 12 ...

  9. Asp.Net MVC4入门指南(7):给电影表和模型添加新字段

    在本节中,您将使用Entity Framework Code First来实现模型类上的操作.从而使得这些操作和变更,可以应用到数据库中. 默认情况下,就像您在之前的教程中所作的那样,使用 Entit ...

  10. ASP.NET MVC 学习6、学习使用Code First Migrations功能,把Model的更新同步到DB中

     参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-new-field-to-th ...

随机推荐

  1. 4.用文本编辑器输入课堂上练习的Hello.java,并在JDK环境下编译和运行。请将程序编译、运行的结果截图,填入下框中。

    一开始报错是因为在文本框了的:用的是中文下的,应该用英文下的;

  2. wuzhicms 发送邮件

    发送邮件 //邮件发送 $config = get_cache('sendmail'); $siteconfigs = get_cache('siteconfigs'); $password = de ...

  3. html文件引入其它html文件的几种方法:include方式

    可以在一个html的文件当中读取另一个html文件的内容吗?答案是确定的,而且方法不只一种,在以前我只会使用iframe来引用,后来发现了另外的几种方法,那今天就总结这几种方法让大家参考一下. 1.I ...

  4. js-数据转换

    <script type="text/javascript"> var msg = '{"code": 0, "data": 2 ...

  5. electron的艰难安装之旅

    最近对前端开发很感兴趣,抽空研究了下前段的开发工具,发现比较流行的是sublime,atom,vscode等, 由于一直以来从事.net开发所以对vscode很感兴趣,在vscode的安装配置过程偶然 ...

  6. 关于JS面向对象中原型和原型链以及他们之间的关系及this的详解

    一:原型和原型对象: 1.函数的原型prototype:函数才有prototype,prototype是一个对象,指向了当前构造函数的引用地址. 2.函数的原型对象__proto__:所有对象都有__ ...

  7. IBAction&amp;IBOutlet

    IB:Interface Builder 1>IBAction 需要操作,例如按钮的点击 2> IBOutlet 需要获得.修改该属性 然后就可以与Storyboard建立起联系

  8. curl错误码说明

    1.得到错误码 $errno=curl_errno($ch); if($errno!=0){ -- } 2.错误码说明 <?php return [ '1'=>'CURLE_UNSUPPO ...

  9. HashMap底层实现原理

    HashMap底层实现 HashMap底层数据结构如下图,HashMap由“hash函数+数组+单链表”3个要素构成 通过写一个迷你版的HashMap来深刻理解 MyMap接口,定义一个接口,对外暴露 ...

  10. (转)ASP.NET MVC 4 RC的JS/CSS打包压缩功能

    转自:http://www.cnblogs.com/shanyou/archive/2012/06/22/2558580.html 打包(Bundling)及压缩(Minification)指的是将多 ...