相似图片分类 [华为]【并查集】

题目描述:

小明想要处理一批图片,将相似的图片分类,他首先对图片的特征采样,得到图片之间的相似度,然后

按照以下规则判断图片是否可以归为一类:

1)相似度>0表示两张图片相似;

2)如果A和B相似,B和C相似,但A和C不相似,那么认为A和C间接相似,可以把ABC归为一类,但不计算AC的相似度;

3)如果A和所有其他图片都不相似,则A自己归为一类,相似度为0。

给定一个大小为N×N的矩阵M存储任意两张图片的相似度,Mij即为第i个图片和第j个图片的相似度,请按照"从大到小"的顺序返回每个相似类

中所有图片的相似度之和。

输入描述:

第一行为一个整数N,代表矩阵M中有N个图片。下面跟着N行,每行有N列数据,空格分隔(为了显示整齐,空格可能为多个),代表N个图片之间的相似度。

约束:

  1. 0 < N <= 900
  2. 0 <= Mij <= 100,输入保证 Mii=0,Mij=Mji
  3. 输入的矩阵中分隔符为1个或连续多个空格

输出描述:

每个相似类的相似度之和。格式为:一行数字。分隔符为1个空格

样例1

输入

5

0 0 50 0 0

0 0 0 25 0

50 0 0 0 15

0 25 0 0 0

0 0 15 0 0

输出

62 25

样例2

输入

5

0 5 42 0 0

5 0 0 91 0

42 0 0 0 15

0 91 0 0 0

0 0 15 0 0

输出

153

样例3

输入

7

0 1 3 0 0 0 0

1 0 2 0 0 0 0

3 2 0 0 0 0 0

0 0 0 0 3 0 9

0 0 0 3 0 5 0

0 0 0 0 5 0 7

0 0 0 9 0 7 0

输出

24 6

AC代码:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1010;

int n, m;
int k[N][N];
int p[N];
map<int, int> p2;
map<int, bool> p3;
vector<int> res;

int find(int x)
{
    if(p[x] != x) p[x] = find(p[x]);
    return p[x];
}

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i ++) p[i] = i;
    for(int i = 1; i <= n; i ++)
    {
        for(int j = 1; j <= n; j ++)
        {
            cin >> k[i][j];
            if(k[i][j] > 0) p[find(i)] = find(j);
        }
    }
    for(int i = 1; i <= n; i ++)
    {
        for(int j = 1; j <= n; j ++)
        {
            if(find(i) == find(j) && k[i][j] > 0) p2[find(i)] += k[i][j];
        }
    }
    for(int i = 1; i <= n; i ++)
    {
        if(p3[find(i)] == false)
        {
            res.push_back(p2[find(i)] / 2);
            p3[find(i)] = true;
        }
    }
    sort(res.begin(), res.end());
    reverse(res.begin(), res.end());
    for(int i = 0; i < res.size(); i ++)
    {
        if(i != res.size() - 1) cout << res[i] << " ";
        else cout <<  res[i];
    }
    return 0;
}
相关推荐
YM52e1 小时前
鸿蒙Flutter Padding内边距:EdgeInsets详解
android·学习·flutter·华为·harmonyos·鸿蒙
爱写代码的阿木2 小时前
基于鸿蒙OS开发附近社交游戏平台(二十二)-ChatPage 即时通讯 UI
游戏·华为·harmonyos
m沐沐3 小时前
【深度学习】YOLOv2目标检测算法——改进点、网络结构与聚类先验框解析
人工智能·pytorch·深度学习·算法·yolo·目标检测·transformer
红烧大青虫3 小时前
HarmonyOS应用开发实战:小事记 - 数据迁移策略:RDB 表结构变更的版本号管理与 onUpgrade 回调
后端·华为·harmonyos·鸿蒙系统
不会就选b3 小时前
算法日常・每日刷题--<链表>3
数据结构·算法·链表
geovindu3 小时前
go: Iterative Algorithms
开发语言·后端·算法·golang·迭代算法
qizayaoshuap4 小时前
# 温度转换 — HarmonyOS 双向转换器与表情符号天气描述实战
华为·harmonyos
爱写代码的阿木5 小时前
基于鸿蒙OS开发附近社交游戏平台(二十三)-拉黑系统、屏蔽与全局过滤
游戏·华为·harmonyos
Zachery Pole5 小时前
CCF-CSP备战NO.7【队列】
算法
闪电悠米6 小时前
力扣hot100-48.旋转图像-转置翻转详解
算法·leetcode·职场和发展