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

网站开发需要的准备石家庄万达网站制作

网站开发需要的准备,石家庄万达网站制作,启信宝企业查询入口,投诉举报网站建设要求1. 题意 给定一个无向图, 统计无法互相到达的点对数。 统计无法互相到达点对数 2. 题解 其实还是求联通块,求联通块可以使用搜索进行标记。还要求得联通块中元素的大小。 联通块其实也就是不相交集合,也可以用并查集来做。 每求得一个联…

1. 题意

给定一个无向图, 统计无法互相到达的点对数。
统计无法互相到达点对数

2. 题解

其实还是求联通块,求联通块可以使用搜索进行标记。还要求得联通块中元素的大小。

联通块其实也就是不相交集合,也可以用并查集来做。

每求得一个联通块的元素个数,与之前所有联通块元素个数相乘;

所以本题目两种做法:

  1. 搜索 + 前缀和
  2. 并查集 + 前缀和
2.1 并查集

并查集的介绍

  • 不记录元素个数的
class Solution {public:
class UnionFind {public:explicit UnionFind(int sz):cnt(sz),pa(sz){iota(pa.begin(), pa.end(), 0);}int Find(int k ){return k == pa[k] ? k : pa[k] = Find(pa[k]);}void Union(int k1, int k2 ){int p0 = Find(k1);int p1 = Find(k2);if ( p0 != p1) {pa[p0] = p1;cnt--;}}int Cnt(){return cnt;}private:vector<int> pa;int cnt;
};long long countPairs(int n, vector<vector<int>>& edges) {UnionFind uf(n);int sz = edges.size();for (int i = 0; i < sz; ++i)uf.Union(edges[i][0], edges[i][1]);unordered_map<int, int> um;for (int i = 0; i < n; ++i ) {um[uf.Find(i)]++;}vector<int> node;for (auto &[k, v]: um) {node.push_back(v);}long long ans = 0;int pre = 0;for (int i = 0; i < node.size(); ++i)ans += 1L * pre * node[i], pre += node[i]; cout << ans << endl;return ans;}
};
  • 记录元素个数的
class Solution {public:
class UnionFind {public:explicit UnionFind(int _sz):cnt(_sz),pa(_sz),sz(_sz, 1){iota(pa.begin(), pa.end(), 0);}int Find(int k ){return k == pa[k] ? k : pa[k] = Find(pa[k]);}void Union(int k1, int k2 ){int p0 = Find(k1);int p1 = Find(k2);if (p0 == p1)return ;if (sz[p0] < sz[p1] ) {pa[p0] = p1;sz[p1] += sz[p0];}else {pa[p1] = p0;sz[p0] += sz[p1];}}int Cnt(){return cnt;}int Size(int idx){ return sz[idx]; }private:vector<int> pa,sz;int cnt;
};long long countPairs(int n, vector<vector<int>>& edges) {UnionFind uf(n);int sz = edges.size();for (int i = 0; i < sz; ++i)uf.Union(edges[i][0], edges[i][1]);vector<int> node;for (int i = 0; i < n; ++i) {if (uf.Find(i) == i)node.push_back(uf.Size(i));}long long ans = 0;int pre = 0;for (int i = 0; i < node.size(); ++i)ans += 1L * pre * node[i], pre += node[i]; return ans;}
};
2.2 搜索
  • DFS
class Solution {public:void dfs( int i, int &num, vector<vector<int>> &g, vector<bool> &vis) {++num;vis[i] = true;for (int &v: g[i]) {if (!vis[v]) {dfs(v, num, g, vis);}}}long long countPairs(int n, vector<vector<int>>& edges) {vector<vector<int>> g(n, vector<int>());vector<bool> vis(n, false);for (auto &v:edges){int f = v[0];int t = v[1];g[f].push_back(t);g[t].push_back(f);}long long ans = 0;long long pre = 0;for (int i = 0; i < n; ++i ) {if (!vis[i]) {int num = 0;dfs( i,  num, g, vis);ans += 1l * pre * num;pre += num; }}return ans;}
};
  • BFS
class Solution {public:void bfs( int i, int &num, vector<vector<int>> &g, vector<bool> &vis) {queue<int> nq;nq.push(i);++num;vis[i] = true;while( !nq.empty() ) {int idx = nq.front();nq.pop();for (auto &v:g[idx]) {if (!vis[v]) {nq.push(v);++num;vis[v] = true;}}}}long long countPairs(int n, vector<vector<int>>& edges) {vector<vector<int>> g(n, vector<int>());vector<bool> vis(n, false);for (auto &v:edges){int f = v[0];int t = v[1];g[f].push_back(t);g[t].push_back(f);}long long ans = 0;long long pre = 0;for (int i = 0; i < n; ++i ) {if (!vis[i]) {int num = 0;bfs( i,  num, g, vis);cout << num << endl;ans += 1l * pre * num;pre += num; }}return ans;}
};
http://www.yayakq.cn/news/295707/

相关文章:

  • 四川建设网有限责任公司招聘seo推广教学
  • 浏览器禁止网站怎么做网站后台设计教程视频
  • 温州网站建设 seo公司邮箱注册申请
  • linux网站建设技术指南 pdfwordpress文章管理模板
  • 热门网站建设代理商城网站建设经验
  • 网站是做后台好还是做前台好青岛网站制作公司哪家正规
  • 无锡网站排名系统怎么查询网站建设时间
  • 把网站传到服务器上怎么做wordpress视频去广告插件
  • 江苏大汉建设实业集团网站系统开发过程中最重要最关键的环节是
  • 了解龙岗网站建设最好的看vr影片的设备
  • 成都网站建设app开发网站服务器建设价格
  • 眼镜东莞网站建设广州百度推广代理公司
  • 太原网站制作哪家不错在国外做购物网站
  • 网站开发中的视图页面指的是什么网站开发需要多少钱app
  • 外国的贸易网站上海外贸展
  • 东莞高端网站建设费wordpress批量添加标签数据库
  • 移动开发网站建设网站开发的基本流程文库
  • wordpress 文章背景透明seo网站排名优化教程
  • 各类东莞微信网站建设深圳公明网站建设
  • 网站开发的广告西安市发布最新消息
  • 网站安全的必要性广告创意图片
  • 西安门户网站网页链接怎么转换成pdf
  • 熊掌号做网站推广的注意事项百度推广系统营销平台
  • 网站建设的作用和意义抖音代运营协议书范本
  • 手机网站免费模板下载酷家乐在线设计官网
  • 做网站如何寻找客源网站的搜索功能一般怎么做
  • 建设银行e房通网站客户crm管理系统
  • 贵阳金阳网站建设公司什么是外包
  • 怎样向网站上传照片域名有了怎么做网站
  • html个人网页制作源代码中小型企业网站优化