博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3259 Wormholes
阅读量:2125 次
发布时间:2019-04-30

本文共 1549 字,大约阅读时间需要 5 分钟。

题意

问是否存在负环

AC

因为Dijkstra不能处理带有负边权的图,可以用spfa 和 BellmenFord

  • spfa
using namespace std;int inf = 0x3f3f3f3f;struct ac{    int v, c;};int dis[N], cnt[N];bool vis[N];vector
g[N];bool spfa(int start , int n) { mem(cnt, 0); mem(dis, inf); mem(vis, false); dis[start] = 0; queue
que; // 将源点入队 que.push(start); vis[start] = true; cnt[start] = 1; while (!que.empty()) { int u = que.front(); que.pop(); vis[u] = false; for (int i = 0; i < g[u].size(); ++i) { int v = g[u][i].v; int c = g[u][i].c; if (dis[v] > dis[u] + c) { dis[v] = dis[u] + c; // 更新的点是否已经入队 if (vis[v] == false) { vis[v] = true; que.push(v); // 入队大于 n 次,存在负环 if (++cnt[v] > n) return true; } } } } return false;}int main(){ freopen("in.txt", "r", stdin); int n, m, w; int t; cin >> t; while (t--) { cin >> n >> m >> w; for (int i = 0; i < m; ++i) { int u, v, c; cin >> u >> v >> c; g[u].push_back((ac){v, c}); g[v].push_back((ac){u, c}); } for (int i = 0; i < w; ++i) { int u, v, c; cin >> u >> v >> c; g[u].push_back((ac){v, -c}); } if (spfa(1, n)) cout << "YES\n"; else cout << "NO\n"; for (int i = 0; i <= n; ++i) { g[i].clear(); } } return 0;}

转载地址:http://ikprf.baihongyu.com/

你可能感兴趣的文章
如何添加网站favicon.ico图标
查看>>
cvs no such repository 问题
查看>>
MySQL中REGEXP正则表达式
查看>>
服务端UDP双向通信学习资料
查看>>
Mina TCP 编码解码相关资料收集
查看>>
Maven 打包 上传 运行
查看>>
Maven插件wagon-maven-plugin自动化部署
查看>>
使用wagon-maven-plugin插件自动部署项目
查看>>
Maven 打包的三种方式 和 Springboot 分离jar包
查看>>
ActiveMQ中Session设置的相关理解
查看>>
Linux Python 2.7.15
查看>>
Nexus配置Linux Yum Repository
查看>>
Nexus Python pip Repository
查看>>
Linux Mysql 8.0.1
查看>>
Python pymqi 连接 IBM MQ
查看>>
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof 详解
查看>>
Java - JVM TLAB、对象在内存中安置顺序、垃圾收集、回收算法
查看>>
转: 关于Linux与JVM的内存关系分析
查看>>
(转)Java 程序员必备的高效 Intellij IDEA 插件
查看>>
局域网(内网)docker安装及代理访问
查看>>