当前位置: 首页 > 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.hkea.cn/news/734799/

相关文章:

  • 上海专业网站建设网百度搜索推广开户
  • 做学校网站素材图片合肥seo代理商
  • 真题真做报名网站淘宝搜索关键词排名
  • 免费的黄冈网站有哪些平台?培训行业seo整站优化
  • 寿县住房与城乡建设局网站真正免费的网站建站平台
  • 常德seo招聘网站seo站长工具
  • 网站开发多久完成俄罗斯搜索引擎yandex推广入口
  • 漳州做网站建设建网站免费
  • 网站建设服务上海广州软文推广公司
  • 做一个网站app需要多少钱web制作网站的模板
  • 网站建设的财务计划新媒体营销策略有哪些
  • 网站建设分金手指专业二八宁波品牌网站推广优化
  • 清远网站建设公司百度游戏风云榜
  • 网上可以自学什么技术win7系统优化软件
  • 嘉兴建站软件如何做好企业网站的推广
  • 在凡科做网站短视频推广
  • 深圳推广公司推荐q群排名优化软件
  • 什么网站做简历模板宁德市医院
  • 用什么软件做公司网站游戏推广赚佣金的平台
  • 购物网站 后台模板河北seo技术培训
  • 聊城建设委员会官方网站google seo
  • 广西建设网郭业棚seo推广具体做什么
  • 武汉网站seo诊断谷歌下载官网
  • 做地方网站能赚钱吗免费seo网站诊断
  • 图片设计在线网站推广优化外包便宜
  • 武汉平价做网站网络软文推广案例
  • 新产品线上推广方案鞍山seo外包
  • 网站建网站建设和优佛山网络推广培训
  • 毕业设计做网站怎么样微信crm管理系统
  • 个人网站开发多少钱电脑培训班零基础