建图:每个点向它四周的点连边权为两点点权的差的绝对值的边。

由于有多个需要“施法”的点,所以相当于对每个这样的点,询问与它的距离在T以内的最长边的最小值,即多次询问。

最长边最小之类的,肯定是最小生成树没跑了。BUT 若是对每个点这样做的话,肯定会TLE。

所以考虑一次处理出所有询问的答案。

在并查集将两个点集连边的时候,若两个点集的点数和<T,则对这两个集内的询问点都没有影响。

若两个点集的点数和>=T,则若A(B)集原来的点数<T,则A(B)集内的询问点都符合了题意,这个最大值就是当前这条边的边权,当然kruscal是贪心的,所以这个值是最小的。

所以并查集除了维护连通性之外,还要维护某个集合的顶点数以及某个集合的询问点数。

P.S.由于NOIP用**的devc++4.9.9.2,所以手贱地试了试,太**了,没有括号匹配,并且调试和缩进和热键都很猥琐。

P.S.P.S.运行时界面没有停留,要最后加上for(;;);,提交前千万别忘了删掉!!!!!!否则TLE得死不瞑目(<---怒立flag)。

 #include<cstdio>
#include<algorithm>
using namespace std;
#define N 601
typedef long long ll;
int Abs(const int &x){return x< ? (-x) : x;}
struct Edge
{
int u,v,w;
Edge(const int &a,const int &b,const int &c){u=a;v=b;w=c;}
Edge(){}
}edges[(N*N)<<];
bool operator < (const Edge &a,const Edge &b){return a.w<b.w;}
int n,m,K,fa[N*N],rank[N*N],a[N][N],nm,num[N][N],en,cnt[N*N],tot,ask_sum[N*N];
bool b[N*N];
ll ans;
void init(){for(int i=;i<=nm;i++) fa[i]=i,cnt[i]=,ask_sum[i]=b[i];}
int findroot(int x)
{
if(x==fa[x]) return x;
int rt=findroot(fa[x]);
fa[x]=rt;
return rt;
}
void Union(const int &U,const int &V)
{
if(rank[U]<rank[V]) fa[U]=V,cnt[V]+=cnt[U],ask_sum[V]+=ask_sum[U];
else
{
fa[V]=U; cnt[U]+=cnt[V]; ask_sum[U]+=ask_sum[V];
if(rank[U]==rank[V]) rank[U]++;
}
}
int main()
{
scanf("%d%d%d",&n,&m,&K); nm=n*m;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&a[i][j]);
num[i][j]=++en;
} en=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&b[num[i][j]]);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(i!=n) edges[++en]=Edge(num[i][j],num[i+][j],Abs(a[i][j]-a[i+][j]));
if(j!=m) edges[++en]=Edge(num[i][j],num[i][j+],Abs(a[i][j]-a[i][j+]));
}
sort(edges+,edges+en+); init();
for(int i=;i<=en;i++)
{
int f1=findroot(edges[i].u),f2=findroot(edges[i].v);
if(f1!=f2)
{
if(cnt[f1]+cnt[f2]>=K)
{
if(cnt[f1]<K) ans+=((ll)edges[i].w*(ll)ask_sum[f1]);
if(cnt[f2]<K) ans+=((ll)edges[i].w*(ll)ask_sum[f2]);
}
Union(f1,f2); tot++;
if(tot==nm-) break;
}
}
printf("%I64d\n",ans);
return ;
}

【kruscal】【最小生成树】【离线】洛谷 P2266 爱的距离的更多相关文章

  1. 洛谷——P1614 爱与愁的心痛

    题目背景 (本道题目隐藏了两首歌名,找找看哪~~~) <爱与愁的故事第一弹·heartache>第一章 <我为歌狂>当中伍思凯神曲<舞月光>居然没赢给萨顶顶,爱与愁 ...

  2. 洛谷——P1617 爱与愁的一千个伤心的理由

    P1617 爱与愁的一千个伤心的理由 题目背景 (本道题目隐藏了两首歌名,找找看哪~~~) <爱与愁的故事第一弹·heartache>第二章. 经历了心痛后,爱与愁大神不行了. 题目描述 ...

  3. 洛谷 P1617 爱与愁的一千个伤心的理由

    P1617 爱与愁的一千个伤心的理由 题目背景 (本道题目隐藏了两首歌名,找找看哪~~~) <爱与愁的故事第一弹·heartache>第二章. 经历了心痛后,爱与愁大神不行了. 题目描述 ...

  4. 洛谷 P1705 爱与愁过火

    P1705 爱与愁过火 题目背景 (本道题目隐藏了两首歌名,找找看哪~~~) <爱与愁的故事第一弹·heartache>第三章. 爱与愁大神说这是ta的伤心指数,只不过现在好很多了,翻译只 ...

  5. 洛谷P1279 字串距离

    题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X ...

  6. 洛谷——T P2136 拉近距离

    https://www.luogu.org/problem/show?pid=2136 题目背景 我是源点,你是终点.我们之间有负权环. ——小明 题目描述 在小明和小红的生活中,有N个关键的节点.有 ...

  7. 洛谷 P1279 字串距离 题解

    每日一题 day24 打卡 Analysis 字符串+dp 仔细观察发现,对于f[i][j],它的值为以下三个值中的最小者: f[i-1][j]+k //a[i]对应空格 f[i][j-1]+k // ...

  8. 洛谷P4180 [Beijing2010组队]次小生成树Tree(最小生成树,LCT,主席树,倍增LCA,倍增,树链剖分)

    洛谷题目传送门 %%%TPLY巨佬和ysner巨佬%%% 他们的题解 思路分析 具体思路都在各位巨佬的题解中.这题做法挺多的,我就不对每个都详细讲了,泛泛而谈吧. 大多数算法都要用kruskal把最小 ...

  9. 洛谷P4172 [WC2006]水管局长 (LCT,最小生成树)

    洛谷题目传送门 思路分析 在一个图中,要求路径上最大边边权最小,就不难想到最小生成树.而题目中有删边的操作,那肯定是要动态维护啦.直接上LCT维护边权最小值(可以参考一下蒟蒻的Blog) 这时候令人头 ...

随机推荐

  1. POJ1456:Supermarket(并查集+贪心)

    Supermarket Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17634   Accepted: 7920 题目链接 ...

  2. bzoj 4004 [JLOI2015]装备购买 拟阵+线性基

    [JLOI2015]装备购买 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1820  Solved: 547[Submit][Status][Dis ...

  3. Spring Boot(一)

    1.注解  @EnableAutoConfiguration 官方文档:The @EnableAutoConfiguration annotation is often placed on your ...

  4. js操作div的显隐

    <!DOCTYPE html><html> <head> <title> new document </title> <meta ht ...

  5. Spring学习--Bean 之间的关系

    Bean 之间的关系:继承.依赖. Bean 继承: Spring 允许继承 bean 的配置 , 被继承的 bean 称为父 bean , 继承这个父 bean 的 bean 称为子 bean. 子 ...

  6. WC后记

    这次去WC本来就是抱着玩儿玩儿的心态去的,结果真算是玩儿了... 我们去的内天北京正好下雪,结果后来等我舅接我们去八十中的时候还在外面等了半个小时,其实雪天在外面挺好的,除了旁边都是一些男程序员.后来 ...

  7. poj 1528 Perfection

    题目链接:http://poj.org/problem?id=1528 题目大意:输入一个数n,然后求出约数的和sum,在与这一个数n进行比较,如果sum>n,则输出ABUNDANT,如果sum ...

  8. linux基础——关于chmod用户权限和文件的相关操作

    第一部分:1) 新建用户natasha,uid为1007,gid为555,备注信息为“master” 操作:useradd natasha新建natasha:修改uid是,usermod -u 100 ...

  9. linux基础的基础命令操作

    一.开启Linux操作系统,要求以root用户登录GNOME图形界面,语言支持选择为汉语 操作:su - root 二.使用快捷键切换到虚拟终端2,使用普通用户身份登录,查看系统提示符 操作:ctrl ...

  10. zabbix ZBX_NOTSUPPORTED: Timeout while executing a shell script.

    有一个监控一直都是正常的,今天突然收到报警邮件,上服务器查看服务又是正常的,但是报警邮件还是没恢复 监控端进行脚本测试,发现是正常的 到监控端使用zabbix_get -s ip -p 端口  -k ...