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

仓山网站建设/网站首页快速收录

仓山网站建设,网站首页快速收录,白银网站seo,临沂高端大气网站建设一道判断负环的模板题。 这里主要介绍三种判断负环的方法。 1.BFS_SPFA方法A 我们可以通过记录每个点的入队次数来判断负环是否存在,不难看出:一个点的入队次数一旦超过n次,则图中一定有负环存在。效率不高,不再提供代码。 2.BFS_…

一道判断负环的模板题。

这里主要介绍三种判断负环的方法。

1.BFS_SPFA方法A

我们可以通过记录每个点的入队次数来判断负环是否存在,不难看出:一个点的入队次数一旦超过n次,则图中一定有负环存在。效率不高,不再提供代码。

2.BFS_SPFA方法B

我们可以记录每个点到源点最短路上经过了几个点,一旦超过n个,则负环一定存在,正确性比较显然、不再赘述。

这个方法为什么会比方法A效率高呢?举个例子:在一个由n个点构成的负环中,方法A要将此环遍历n次,而方法B遍历1次就行了.

3.DFS_SPFA方法

我们只需将SPFA改用DFS实现, 然后应用方法B, 我们就能高效的求出负环了. 

愉快的写完代码,提交完成,TLE. mengbi了一会下了组数据后发现,其实大多情况下该算法表现的十分优秀. 

DFS_SPFA

经过思考发现:如果一个图没有负环的话,以上方法就像一个弱化版本的SPFA,效率大大降低.所以该方法还是要慎用.

总结:

DFS_SPFA由于它的不稳定性,还是要慎用的.因为我们无法保证图中一定有负环(保证了还判什么).

BFS_SPFA的方法A就不考虑了, 方法B比他优秀的多....

总体来说个人认为求稳的话,还是使用BFS_SPFA比较保险.

AC代码:

这里给出了BFS方法B和DFS的方法:

 

#include <cstring>
#include <cstdio>
#include <cctype>
#include <queue>inline void read(int & x)
{int k = 1; x = 0;char c = getchar();while (!isdigit(c))if (c == '-') c = getchar(), k = -1;else c = getchar();while (isdigit(c))x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();x *= k;
}int n, m, cnt, x, y, z, T, u, f[2020], d[2020], v[2020], k[2020], flag;struct Edge { int v, w, nxt; } e[7000];inline void addedge(int a, int b, int z) { ++cnt, e[cnt].nxt = f[a], e[cnt].v = b, e[cnt].w = z, f[a] = cnt; }inline bool BFS_SPFA(void)
{memset(d, 0x3f, sizeof(d));memset(v, false, sizeof(v));d[1] = 0, v[1] = 1, k[1] = 0;std::queue<int> Q; Q.push(1);while (!Q.empty()){u = Q.front(), Q.pop(), v[u] = 0;for (int i = f[u]; i != -1; i = e[i].nxt)if (d[e[i].v] > d[u] + e[i].w){d[e[i].v] = d[u] + e[i].w,k[e[i].v] = k[u] + 1;if (k[e[i].v] > n) return false;if (!v[e[i].v]) v[e[i].v] = 1, Q.push(e[i].v);}}return true;
}void DFS_SPFA(int u)
{v[u] = true;for (int i = f[u]; i != -1; i = e[i].nxt)if (d[e[i].v] > d[u] + e[i].w){d[e[i].v] = d[u] + e[i].w;if (v[e[i].v] == 1) { flag = 1; return; }DFS_SPFA(e[i].v);}v[u] = false;
}inline void Work(void)
{flag = 0;memset(d, 0x3f, sizeof(d));memset(v, false, sizeof(v));d[1] = 0;DFS_SPFA(1);if (flag) puts("YE5");else puts("N0");
}signed main()
{read(T);for (int plk = 1; plk <= T; ++plk){memset(f, -1, sizeof(f)); cnt = 0;read(n), read(m);for (int i = 1; i <= m; ++i){read(x), read(y), read(z);addedge(x, y, z);if (z >= 0) addedge(y, x, z);}if (!BFS_SPFA()) puts("YE5");else puts("N0");//Work();    
    }return 0;
}

 

转载于:https://www.cnblogs.com/yanyiming10243247/p/9900154.html

http://www.lbrq.cn/news/1565713.html

相关文章:

  • 现在还做自适应网站/你对网络营销的理解
  • 网站建设与网页设计总结/职业培训机构资质
  • 住房和城乡建设厅网站青海省/seo优化排名教程
  • 网站和网页不同吗/墨子学院seo
  • 高校后勤网站建设要求/今日热搜榜前十名
  • wordpress主页定制/seo排名优化软件价格
  • 合肥哪里有建站公司/百度下载安装到桌面
  • wordpress无法使用api/seo北京网站推广
  • 网站域名备案资料/目前最好的引流推广方法
  • 怎么建设网站规划/千度seo
  • apache 创建网站/企业网站seo平台
  • seo流量/如何提高网站排名seo
  • 网站被别人域名绑定/中国十大电商平台
  • 贵州省建设厅网站造价工程信息网/怎么查百度竞价关键词价格
  • 为什么要建设个人网站/今日郑州头条最新新闻
  • 做文字图片的网站/seo优化专员编辑
  • 云南网站搭建/百度快照优化培训班
  • 男女第一次做网站爱/互联网项目推广平台有哪些
  • 网站 备案 注销/南宁正规的seo费用
  • 弹性web安装wordpress/seo教学网seo
  • wordpress评论详情页/seo 论坛
  • 新网$网站优化/福州网seo
  • 设计感强的网站/北京如何优化搜索引擎
  • 企业网站托管一个月多少钱/百度竞价托管外包
  • 古田网站建设/百度推广联系人
  • 无法升级wordpress/谷歌seo网站运营
  • wordpress ecshop/广东企业网站seo哪里好
  • 用layui做的网站/收录情况
  • 网站 防止采集/百度推广公司哪家比较靠谱
  • 做ppt图片用的网站有哪些问题/免费广告推广软件
  • 4. 索引数据的增删改查
  • 机器学习实战篇--TF-IDF实战--名著红楼梦的文本数据处理
  • Mysql基本使用语句(一)
  • 【Linux】常用命令(三)
  • Mysql——如何做到Redolog崩溃后恢复的
  • 数字气压传感器,筑牢汽车TPMS胎压监测系统的精准感知基石