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

免费网站备合肥网站优化服务网

免费网站备,合肥网站优化服务网,陕西网站开发联系方式,张家港城市建设规划局网站题目链接: 蓝桥账户中心 朋友分享给我一道题&#xff0c;我刚开始其实先用dfs写&#xff0c;但是直接就超时了(很大的一部分原因是截图中没有数据范围) #include<bits/stdc.h> using namespace std; const int MAXN 1e97; vector<int> graph[MAXN]; bool visite…

题目链接:

蓝桥账户中心

朋友分享给我一道题,我刚开始其实先用dfs写,但是直接就超时了(很大的一部分原因是截图中没有数据范围)

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e9+7;
vector<int> graph[MAXN]; 
bool visited[MAXN];    
int dfs(int node, int steps) {if (steps < 0) return 0;visited[node] = true;int count = 1; for (int x : graph[node]) {if (!visited[x]) {count += dfs(x, steps - 1);}}return count;
}
int main() {int n, m, Q;cin >> n >> m >> Q;for (int i = 0; i < m; i++) {int a, b;cin >> a >> b;graph[a].push_back(b);graph[b].push_back(a);}double totalNum = 0; for (int i = 0; i < Q; i++) {int x, y;cin >> x >> y;fill(visited, visited + n + 1, false);  int num = dfs(x, y); totalNum += num;}double res = totalNum / Q;cout << fixed << setprecision(2) << res << endl;return 0;
}

找到原题后,改成bfs就过了 

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e9+7;
vector<int> graph[MAXN];
int visitTime[MAXN] = {0};
int curTimes = 0;
int bfs(int x, int y) {if (y < 0) return 0;curTimes++;queue<pair<int, int>> q;q.push({x, 0});visitTime[x] = curTimes;int count = 1;while (!q.empty()) {auto [u, d] = q.front();q.pop();if (d >= y) continue;for (int v : graph[u]) {if (visitTime[v] != curTimes) {visitTime[v] = curTimes;count++;q.push({v, d + 1});}}}return count;
}int main() {int n, m, Q;cin >> n >> m >> Q;for (int i = 0; i < m; i++) {int a, b;cin >> a >> b;graph[a].push_back(b);graph[b].push_back(a);}double totalNum = 0;for (int i = 0; i < Q; ++i) {int x, y;cin >> x >> y;totalNum += bfs(x, y);}double ex= totalNum / Q;cout << fixed << setprecision(2) << ex << endl;return 0;
}

我其实想分享的是如何在比赛中去分辨简单图论问题应该是用dfs还是bfs进行求解

蓝桥杯比较喜欢考bfs, 但是如果你平常喜欢刷力扣或者面试题的话,我建议你图论就用dfs, 这是因为面试题它比较喜欢考DP, 你对dfs理解很深刻的话, 对你刷DP题也是有帮助的 

 

 

根据上面的数据范围进行分析, 我最初写的dfs代码时间复杂度在O(n*Q), 明显超时了,但是改成bfs,它的时间复杂度在O(Q * (平均k + 平均e))

简单解释一下:

在BFS中,单次查询的时间复杂度为 O(k + e),其中:

  • k 是实际访问的节点数,对应队列操作的时间复杂度。

  • e 是实际遍历的边数,对应处理每个节点的邻居的时间复杂度

  1. 队列操作的时间复杂度(O(k))
    BFS使用队列管理待扩展的节点。每个节点最多入队一次、出队一次,总共有 k 个节点被访问。因此,队列的入队和出队操作的时间复杂度为 O(k)

  2. 处理边的时间复杂度(O(e))
    对于每个访问的节点,需要遍历它的所有邻居(即连接的边)。假设节点 u 有 degree(u) 条边,则处理 u 的时间复杂度为 O(degree(u))
    所有被访问节点的边数总和为 e = Σdegree(u)(其中 u 是被访问的节点),因此处理所有边的时间复杂度为 O(e)

  3. 由于每条边最多被处理两次(双向),总体复杂度为 O(Q * (平均k + 平均e))

然后就有人问了,哪为啥O(Q*(k+e)) 没有超时啊, 如果图退化成类似于单链表的形式, k->n, e->m, 时间复杂度就变成了O(Q*(n+m))了, 那不还是超时了吗

其实是不会出现上述的极端情况的, 因为常见的图都是稀疏图

稀疏性判断:

  • 稀疏图定义:边数 m 远小于完全图的边数 n(n−1)/2。

  • 本题中,m≤5n,即平均每个节点的度数不超过 10(因为 平均度数=2m/n≤10)。

  • 结论:这是一个典型的稀疏图

其中n(n−1)/2这个边界是完全图, 就是指图中每对不同的顶点之间都恰有一条边相连的图。对于有 n 个顶点的完全图,其边数最大。

平均度数计算: 所有节点的度数之和/n。 在无向图中,每条边连接两个节点,因此每条边在计算所有节点的度之和时会被计算两次。如果图中有 m 条边,那么所有节点的度之和为 2m

所以平均度数=2*m/n

查询的步数限制 yi
  • 如果 yi较小(如yi​≤10),BFS 每层扩展的节点数受限于图的稀疏性,k 和 e 会远小于 n 和 m。

  • 如果 yi​ 较大(如yi​≈n),BFS 可能覆盖整个连通分量,此时k≈n, e≈m

常见的图是稀疏图, bfs会更优, 赛场上别浪费时间, 后面有时间我会再出一期关于dfs和bfs在不同图中时间复杂度的分析

 

 

 

 


文章转载自:

http://27QUjf6j.krtky.cn
http://CzNiLmTV.krtky.cn
http://Qd0xmD2q.krtky.cn
http://Fe3rsBVQ.krtky.cn
http://5uK2O1C8.krtky.cn
http://bRuKgynO.krtky.cn
http://2xTLsa6N.krtky.cn
http://fnWwWueH.krtky.cn
http://4QgAuNqB.krtky.cn
http://HkMXq0OI.krtky.cn
http://60Q4abyR.krtky.cn
http://1khIIkND.krtky.cn
http://BkoMMJtp.krtky.cn
http://Ib5FuX8W.krtky.cn
http://9YzbN1bs.krtky.cn
http://STar8QRn.krtky.cn
http://vYWAioLR.krtky.cn
http://iOuazbDs.krtky.cn
http://50cvgnFo.krtky.cn
http://FyaC5gqU.krtky.cn
http://vD8LRbO4.krtky.cn
http://j6zcBYOY.krtky.cn
http://JK99abko.krtky.cn
http://8Mx2ahfX.krtky.cn
http://RbhjSpRH.krtky.cn
http://hY3g47al.krtky.cn
http://UciwcBuT.krtky.cn
http://X0mlcofT.krtky.cn
http://gpLC0Ysg.krtky.cn
http://uwdjyCup.krtky.cn
http://www.dtcms.com/wzjs/693225.html

相关文章:

  • 做网站建设公司赚钱如何引用404做网站
  • 网站建设 数据库连接百度推广二级代理商
  • 网站建设技术可行性做旅游攻略的网站代码
  • 做网站什么系统简单产品市场推广途径
  • 做企业形象网站网站建设运维情况
  • 旅游商城网站建设宝山苏州网站建设
  • 手机网站免费生成app网络营销策略案例分析
  • 旅行社做网站齐家网装修怎么样
  • 做搞机网站做动画合成的视频网站
  • 一个网站的建设需要什么手续推广运营方案
  • 网站开发php有哪些企业信息管理系统有哪些
  • 京东客网站怎么做php做网站难么
  • 从0建设一个网站文字转图片生成器在线
  • 手机商城网站案例动漫网站实现功能
  • 赛车pk10计划网站建设南通网站的优化
  • 长沙哪里可以做网站东莞企业自助建站系统
  • 官方网站怎么注册哪个网站做h5比较好
  • 营销型网站设计建设网站seo方案建议
  • 男女在床上做暖暖插孔视频网站设计师招聘网站有哪些
  • 广州专业网站开发在家做网站
  • 平阳高端网站建设安徽品质网站建设创新
  • 衡水网站建设培训学校建设网站的报价
  • 鱼馆网站的前期策划去掉 wordpress.org
  • 免费个人简历制作网站mm131爬虫wordpress
  • 网络营销的特点及形式天津网站建设seo优化
  • 子域名的网站放到哪里去公司网站备案网址
  • 网站建设与维护相关知识wordpress+免备案空间
  • 建网站用什么工作站网站怎么快速排名
  • 什么是网站维护南宁seo做法价格
  • 做网站的流程与步骤南昌vr网站开发