https://biancheng.love/problem/640/index

一直re

不是并查集吗

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <assert.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;#include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
const int maxn = 1e6 + 20;
const LL MOD = 10007;
int n, m, q;
string str[maxn];
int fa[maxn];
int Size[maxn];
int first[MOD + 20];
int num;
void init(int tot) {for (int i = 0; i <= MOD; ++i) {fa[i] = i;Size[i] = 1;}memset(first, 0, sizeof first);num = 0;
}
struct node {LL val;int id;int u;int tonext;
} e[maxn * 2];
void add(int x, int y) {++num;e[num].val = 1LL * x * 1000000 + y;assert(e[num].val >= 0);e[num].id = num;e[num].u = e[num].val % MOD;e[num].tonext = first[e[num].u];first[e[num].u] = num;
}
int tohash(int x, int y) {LL val = 1LL * x * 1000000 + y;int u = val % MOD;for (int i = first[u]; i; i = e[i].tonext) {if (e[i].val == val) return e[i].id;}while(1);
//    assert(false);
}
int tofind(int x) {if (fa[x] == x) return x;else return fa[x] = tofind(fa[x]);
}
void tomerge(int x, int y) {x = tofind(x);y = tofind(y);if (x != y) {fa[y] = x;Size[x] += Size[y];}
}
int tonext[4][2] = {{0, 1}, {1, 0}, {0, -1}, { -1, 0}};
struct data {int val, fa;
} gg[12];
void work() {scanf("%d%d%d", &n, &m, &q);for (int i = 1; i <= n; ++i) {scanf("%s", str[i].c_str() + 1);}init(n * m);for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) {add(i, j);}}for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) {if (i - 1 >= 1 && str[i - 1][j] == str[i][j]) {int x = tofind(tohash(i, j));int y = tofind(tohash(i - 1, j));tomerge(x, y);}if (j - 1 >= 1 && str[i][j - 1] == str[i][j]) {int x = tofind(tohash(i, j - 1));int y = tofind(tohash(i, j));tomerge(x, y);}}}while (q--) {int x, y;scanf("%d%d", &x, &y);memset(gg, 0, sizeof gg);int ans = Size[tofind(tohash(x, y))];for (int i = 0; i < 4; ++i) {int tx = x + tonext[i][0];int ty = y + tonext[i][1];if (tx >= 1 && tx <= n && ty >= 1 && ty <= m) {int father = tofind(tohash(tx, ty));if (gg[str[tx][ty] - '0'].fa == father) continue;gg[str[tx][ty] - '0'].val += Size[father];gg[str[tx][ty] - '0'].fa = father;}}int id = str[x][y];for (int i = 0; i < 4; ++i) {int tx = x + tonext[i][0];int ty = y + tonext[i][1];if (tx >= 1 && tx <= n && ty >= 1 && ty <= m) {
//                int father = tofind(tohash(tx, ty));if (ans < gg[str[tx][ty] - '0'].val) {ans = gg[str[tx][ty] - '0'].val;id = str[tx][ty];} else if (ans == gg[str[tx][ty] - '0'].val) {if (id == str[x][y]) {id = str[tx][ty];}}}}printf("%d\n", ans + (id != str[x][y]));}
}int main() {
#ifdef localfreopen("data.txt", "r", stdin);
//    freopen("data.txt", "w", stdout);
#endifint t;scanf("%d", &t);while (t--) work();return 0;
}

View Code

转载于:https://www.cnblogs.com/liuweimingcprogram/p/6195680.html

两点之间 这题有毒啊,不会做相关推荐

  1. 如何求地球上两点之间的最短距离_高三数学这样复习“最高效”,稳稳120+!...

    很多同学到了高三不知道怎样去复习,今天着重给大家说说应该如何复习高三数学! 第一步 调整心态,化解不良情绪的干扰 每到这个时候很多同学总会出现些或轻或重的紧张心理现象,严重者甚至失眠,从而干扰了复习的 ...

  2. 点线形系列1-计算两点之间的距离

    分数 10 作者 蔡轲 单位 南昌航空大学 输入连个点的坐标,计算两点之间的距离 输入格式: 4个double类型的实数,两个点的x,y坐标,依次是x1.y1.x2.y2,两个点的坐标之间以空格分隔, ...

  3. 本关任务:编写一个Point类,有x、y两个属性。编写一个PointDemo类,并提供一个distance(Point p1,Point p2)方法用于计算两点之间的距离,实例化两个具体的Point对

    #java编程基础 以后会时常更新java编程题,分享所遇之难,答疑解惑,共同努力. 本关任务:编写一个Point类,有x.y两个属性.编写一个PointDemo类,并提供一个distance(Poi ...

  4. joj 2737 狼与羊的故事 求任意两点之间的必经之路

    村长要召开羊族大会,讨论羊族未来的发展,要求羊羊们到指定地点集合.小羊们收到通知后从家里出发到达指定地点.每个羊的家都是与其他羊的家连通的,可以互相访问. 比如说可以从1到3,同样也可以从3到1 .灰 ...

  5. 遍历寻找给定两点之间的所有路径

    直接入题,参加2017年华为竞赛的时候,需要输出路径,当时设了源点和汇点,是单源单汇的寻路径,那么问题就归为寻找给定两点之间的所有路径问题 我们的老师一直教我们这些菜鸟们说,写程序一定要先在纸上写好考 ...

  6. php 计算两点时间距离,PHP计算地球上两点之间的距离(示例详解)

    给定经度和纬度,求地球上两点之间的距离.首先我们需要了解该问题的解决思路,然后再用PHP代码来实现计算. 此问题可以用半正矢(haversine)公式求解: 大圆距离或正交距离是球面(或地球表面)上两 ...

  7. 通过gps给定的两个经纬度坐标,计算两点之间的距离

    /** * * 计算两地之间的距离(给定经纬度) * * @param lat1 出发地经度 * @param lng1 出发地纬度 * @param lat2 目的地经度 * @param lng2 ...

  8. arcgis两点之间连线_ArcGIS中实现一种流向地图的方法

    其实早在2011年,Esri的制图专家Mamata Akella就发表了一篇Blog,介绍在ArcGIS中实现一种流向地图的方法[1],来展示2011年Esri用户大会的参会者来源,如下图所示. 这里 ...

  9. 两点之间的连线java_java计算图两点之间的路径实例代码

    java计算图两点之间的路径总结 本文实例为大家分享了java计算图两点之间的所有路径的具体代码,供大家参考,具体内容如下 1.给定图如下: 2.求0到3之间可达的所有路径 这里问题就是关于搜索遍历的 ...

最新文章

  1. angularjs与java_关于angularjs与java结合,获取后台数据并解析的问题
  2. linux命令之tee,技术|为初学者介绍的 Linux tee 命令(6 个例子)
  3. C# Check is No number
  4. Linux+varnish安装配置
  5. php 禁用外部实体,php – Doctrine 2 – 从实体外部禁用PrePersist
  6. 【干货】深度学习中的线性代数---简明教程
  7. 2021牛年春节海报PSD分层模板,简单一点就好!
  8. HTML静态网页练习例子
  9. SpringBoot及SpringCloud版本管理(Gradle版本)
  10. AD20—PCB总结
  11. MP3stego下载(强大的隐写工具)
  12. 外媒的指责恰恰反映华为的通信设备足够安全、技术领先
  13. FTP错误详解及解决方案
  14. leaflet maxZoom突破18
  15. linux怎样将文件夹设置共享,Linux操作系统下共享文件夹设置方法介绍
  16. 零经验小白的独游历程——俯视角45度游戏,人物用2D还是3D
  17. Kafka与其他MQ对比
  18. 基于STM32F103设计的智能门锁(支持多种开锁解锁方式)
  19. C++signed 与unsigned理解
  20. 2003服务器运行库,微软常用运行库合集包最新版支持XP/2003/7/8/8.1/10(32+64位)

热门文章

  1. NCHW与NC4HW4数据排布在卷积优化上的优劣分析
  2. CVE-2019-8660 iMessage 漏洞复现
  3. 无法定位程序输入点 inet_ntop 于动态链接库 WS2_32.dll上
  4. 信息熵与信息增益的理解
  5. All is about C!
  6. unity json mysql_unity——json总结
  7. 报错 之 from typing import OrderedDict ImportError: cannot import name ‘OrderedDict‘ from ‘typing‘
  8. C++ list用法总结
  9. MySQL的sql_mode解析与设置
  10. 刷新存储器的容量单位是什么_GD25Q80CSIG|相变存储器是什么,具备什么特点?