当前位置: 首页 > news >正文

网站建设辅助网站备案好不好

网站建设辅助,网站备案好不好,建成局网站建设,如何做电商运营推广💯 博客内容:并查集 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准C后端工程师,专注基础和实战分享 ,欢迎私信! 💖 欢迎大家:这里是C…

💯 博客内容:并查集

😀 作  者:陈大大陈

🚀 个人简介:一个正在努力学技术的准C++后端工程师,专注基础和实战分享 ,欢迎私信!

💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

 

目录

初版

路径压缩版 

两个例题 

几张桌子

是不是亲戚 


并查集是一种挺实用的数据结构,可以处理一些不相交集合的合并问题

基本操作有初始化,合并,查找,统计。

咱们先来个初版,再优化一下。

初版

#include<bits/stdc++.h>
using namespace std;
const int N = 10000;
int fa[N];
void init(int N)//初始化
{for (int i = 1; i <= N; i++){fa[i] = i;}
}
int find(int i)//查找
{return i == fa[i] ? i : find(fa[i]);
}
void Union(int i, int j)//合并
{int x = find(i);int y = find(j);fa[x] = y;
}

这种并查集查找的效率太低,最坏情况的时间复杂度能达到O(N)。

我们就针对它优化。

路径压缩版 

#include<bits/stdc++.h>
using namespace std;
const int N = 10000;
int fa[N];
void init(int N)
{for (int i = 1; i <= N; i++){fa[i] = i;}
}
int find(int i)
{if (i == fa[i]){return i;}else{fa[i] = find(fa[i]);return fa[i];}
}
void Union(int i, int j)
{int x = find(i);int y = find(j);fa[x] = y;
}

上面的时间复杂度最好能有O(1)。

实现方式是记忆化搜索,用数组存储好所需结果,需要时就不用再次递归了。

来看两个例题巩固一下。

两个例题 

几张桌子

How Many Tables(并查集)

Problem - 1213 (hdu.edu.cn)

题目:

Today is Ignatius’ birthday. He invites a lot of friends. Now it’s dinner time. Ignatius wants to know how many tables he needs at least. You have to notice that not all the friends know each other, and all the friends do not want to stay with strangers.

One important rule for this problem is that if I tell you A knows B, and B knows C, that means A, B, C know each other, so they can stay in one table.

For example: If I tell you A knows B, B knows C, and D knows E, so A, B, C can stay in one table, and D, E have to stay in the other one. So Ignatius needs 2 tables at least.

Input

The input starts with an integer T(1<=T<=25) which indicate the number of test cases. Then T test cases follow. Each test case starts with two integers N and M(1<=N,M<=1000). N indicates the number of friends, the friends are marked from 1 to N. Then M lines follow. Each line consists of two integers A and B(A!=B), that means friend A and friend B know each other. There will be a blank line between two cases.

Output

For each test case, just output how many tables Ignatius needs at least. Do NOT print any blanks.

Sample Input


5 3 
1 2 
2 3 
4 5

5 1 
2 5

Sample Output

4

思路:每个人是一个数组,两个数组内存的数如果相同,代表认识并成为一桌;(每个数组内刚开始都是自身编号)

给你们一组特殊测试数据:

输入:

1

5 4

1 2

1 3

4 3

3 4

输出:

2
 

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
const int N = 1050;
int fa[N];
void init()
{for (int i = 1; i <= N; i++){fa[i] = i;}
}
int find(int i)
{if (i == fa[i]){return i;}else{fa[i] = find(fa[i]);return fa[i];}
}
void Union(int i, int j)
{int x = find(i);int y = find(j);fa[x] = y;
}
int main()
{int t, x, y, n, m;cin >> t;//t个测试while (t--){cin >> n >> m;init();for (int i = 1; i <= m; i++){cin >> x >> y;Union(x, y);//合并x和y}int ans = 0;for (int i = 1; i <= n; i++)//统计有多少个集{if (fa[i] == i)ans++;}cout << ans << endl;}return 0;}
是不是亲戚 

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
const int N = 1050;
int fa[N];
void init()
{for (int i = 1; i <= N; i++){fa[i] = i;}
}
int find(int i)
{if (i == fa[i]){return i;}else{fa[i] = find(fa[i]);return fa[i];}
}
void Union(int i, int j)
{int x = find(i);int y = find(j);fa[x] = y;
}
int main()
{int n, m, n2;;cin >> n >> m;init();for (int i = 0; i < m; i++){int x, y;cin >> x >> y;Union(x, y);}cin >> n2;for (int i = 0; i < n2; i++){int x, y;cin >> x >> y;if (find(x) == find(y))cout << "Yes" << endl;elsecout << "No" << endl;}return 0;}

http://www.yayakq.cn/news/418986/

相关文章:

  • 网站 美食频道 建设网站关键词怎样做优化
  • 做微网站用什么框架大鱼直播
  • 网站建设公司领导致辞深圳网站空间
  • 怎样制作公司网站天津网站备案去哪
  • 华升建设集团有限公司网站网站开发常用小图片
  • 通辽网站建设招聘wordpress点击弹出层插件
  • 网站建设都用哪些软件展示型网站设计
  • 网站开发榜单规则株洲新站seo
  • it培训网站哈尔滨最新通知
  • 成都三合一网站建设推荐个2021能看的网站
  • 建设一个什么网站赚钱中山seo外包
  • 网页设计公司网站制作做网站的商家怎么后去流量费
  • 唐山网站建设培训凡科登录入口app下载
  • 个人工作室网站怎么做有做全棉坯布的网站吗
  • 制作企业网站与app有什么不同青岛永诚网络有限公司
  • 对于网站建设的调查问卷wordpress时间中文版
  • 网站建设运营策划方案建站重庆
  • 临海做 网站男女做暧暧试看网站49
  • 大连网站建设设计北京网站建设迈程网络
  • 网站由哪三部分构成电子商务网站建设分析
  • 做订单管理网站用什么软件山西住房城乡建设厅网站
  • 免费网站入口网站免费进做网站要需要多少钱
  • 溧水114网站开发php网站开发文档模板
  • 做网站提成做网站国家大学科技园郑州
  • 棕色网站设计门户网站 建设 如何写
  • 杭州百家号优化google搜索排名优化
  • 建站行业消失了吗WordPress资讯站点源码
  • 网站开发方式哪四种珠海企业网站搭建制作
  • 租车网站建设方案宁波seo推广平台
  • 怎么做网站浏览量分析公司视频广告拍摄