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

济南优化网站的哪家好网站添加背影音乐怎么做

济南优化网站的哪家好,网站添加背影音乐怎么做,海外网站入口,网站起名字大全拓扑序列:可以用来判断一个有向图是否有环! 拓扑排序可以判断有向图是否存在环。我们可以对任意有向图执行上述过程,在完成后检查A序列的长度。 若A序列的长度小于图中点的数量,则说明某些节点未被遍历,进而说明图中存…

拓扑序列:可以用来判断一个有向图是否有环!
拓扑排序可以判断有向图是否存在环。我们可以对任意有向图执行上述过程,在完成后检查A序列的长度。 若A序列的长度小于图中点的数量,则说明某些节点未被遍历,进而说明图中存在环。

拓扑排序是结合bfs框架来实现的,每次从入度为0的点开始搜索;所以需要先预处理出来所有入度为0的节点,入队,然后去遍历这些入度为0的点,每次将这些点进行逻辑上的删除,然后更新它的直接邻接点的入度,如果直接邻接点的入度减为0,则将其也入队!

  1. 建立一个队列,负责按照拓扑序列存取节点。
  2. 预处理所有点的入度d[i], 起初把所有入度为0的点入队。
  3. 取出队头节点t, 把 t 加入拓扑序列 – 队列q的末尾。
  4. 对于从x出发的每条边x->y,y即为x的直接邻接点, 把d[y]−−。若被减为0, 则把y入队。
  5. 重复第3∼4步直到队列为空, 此时队列q即为所求。

本题中心思想: 用 已确定方向的边 建好图后,给 未确定方向的边 设置方向 这部操作其实就是 加边 行为。如果当前图中已经存在 环
了,那么加额外的边是不能去掉这个 环 的(除非删掉环上的某一条边) 大致就是以上意思

由于我们只建立了有向边,而无向边的话是没有建立的,所以意味着建立的有向图不会经过所有的顶点,,那为什么生成的拓扑序列 就能够确保经过所有的顶点呢?

因为属于不同连通块亦能构成拓扑序,拓扑排序本身不会被局限在一个连通块内

对于无向边的节点,我们需要知道它在拓扑序列中的位置,而拓扑序列我们已经预处理出来了,只需要求出拓扑序列里,含无向边的两个点,让它们按照拓扑序列从前往后指向,就必然不会破坏拓扑序列并且合法!

代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>using namespace std;const int N = 2e5 + 10, M = N;
int T, n, m;
int top[N], pos[N];     //存放拓扑序!
int h[N], e[M], ne[M], d[N], idx;
struct Edge{int a, b;
}edge[M];void add (int a, int b)
{e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}bool topsort ()
{queue<int> q;   //定义一个队列!//预处理出来所有入度为0的节点:for (int i=1; i <= n; i ++)if (!d[i])q.push(i);int cnt = 0;while (q.size()){auto t = q.front();q.pop();top[cnt ++] = t;    //存放拓扑序列! for (int i=h[t]; ~i; i = ne[i]){int j = e[i];d[j] --;if (d[j] == 0)q.push(j);}}//判断存放的元素个数:if (cnt < n) return false;else return true;
}int main()
{cin >> T;while (T --){int cnt = 0;//初始化:memset (h, -1, sizeof (h));memset (d, 0, sizeof (d));  //度数数组!idx = 0;scanf ("%d%d", &n, &m);while (m --){int t, x, y;scanf("%d%d%d", &t, &x, &y);if (!t) edge[cnt ++] = {x, y};else{   //即为有向边!add (x, y);d[y] ++;}}if (!topsort())    //利用拓扑序列判断是否有环puts("NO");else{puts("YES");for (int i=1; i <= n; i ++) //输出拓扑序列:for (int j=h[i]; ~j; j = ne[j])printf ("%d %d\n", i, e[j]);    //指代有向边!//记录每个点的位置://pos[i]:表示的是i号节点在拓扑序列中的位置for (int i=0; i < n; i ++) pos[top[i]] = i;for (int i=0; i < cnt; i ++){int a = edge[i].a, b = edge[i].b;if (pos[a] > pos[b]) swap(a, b);printf ("%d %d\n", a, b);}}}return 0;
}```
http://www.yayakq.cn/news/477477/

相关文章:

  • 哈尔滨企业网站seo网络编程软件
  • 成都市城乡建设厅官方网站聊城做网站的公司信息
  • 访问网站速度很慢行政部建设公司网站
  • asp.net搭建网站自己怎么建设收费电影网站
  • 2002年网站建设公司商城网站建设制作
  • 国内做的比较好的数据网站wordpress自带搜索
  • s001网站建设wordpress显示运行时间
  • 网站开发新技术探索米拓cms
  • 黑龙江省建设网站首页一个网站的二级目录在另一台服务器上_怎么做
  • 卡盟建设vip网站上海室内设计公司排行榜
  • 国外做文化的网站网站建设人员需求分析
  • 企业网站外包建设app定制网站开发
  • 淘宝客自己做网站吗私人定制网
  • cms管理手机网站绍兴网站开发08keji
  • 用html5做手机网站宝塔和wordpress
  • 企业定制网站开发维护合同产品宣传推广方案
  • wordpress企业站被黑有哪些小公司网站
  • 企业网站建设如何去规划二级网站免费建
  • 网站移动适配怎么创建子网站
  • 大连手机自适应网站制作公司网站子目录怎么做反向代理设置
  • 网站开发与游戏网站建设论文
  • 网站收录了没有排名网站做系统叫什么名字
  • 做美团网这种网站赚钱吗wordpress+电商版本
  • 北京朝阳区最好的小区哈尔滨优化建站哪家专业
  • 肃宁做网站价格最新新闻热点事件50字
  • 企业网站建设策划书案例做企业网站的费用挂什么科目
  • 企业营销型网站规划百度关键词指数查询工具
  • 济宁北湖建设集团网站python做网站有什么优势
  • 学做快餐的视频网站创意产品设计图
  • 网站集约化建设调研报告网站制作生成器