博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3259 负环
阅读量:4657 次
发布时间:2019-06-09

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

题意:判是否有负环

分析:SPFA 入队n次以上有负环

 

 

#define M 505struct Node{    int v,val,next;}edge[M<<4];int len;int head[M],  n,  rt;int dist[M], pre[M], vis[M], times[M];void add(int &kind, int v, int val){
//起点 终点 权值 edge[len].next = kind; edge[len].v = v; edge[len].val = val; kind = len++;}deque
que;bool SPFA(){ que.push_back(rt); dist[rt]=0; //pre[rt]=-1; while( !que.empty() ){ int u = que.front(); que.pop_front(); vis[u] = 0; for(int i = head[u]; i != -1; i = edge[i].next) { int v = edge[i].v, val = edge[i].val; if(dist[v] > dist[u]+val) { dist[v] = dist[u]+val; //pre[v]=u; if( !vis[v] ){ int t = que.front(); if(dist[v] > dist[t]) que.push_back(v); else que.push_front(v); vis[v] = 1; times[v]++; if(times[v]>=n) return false;//入队次数>=n 则有负环 } } } } return true;}void init(){ len = 0; memset(head,-1, sizeof head); memset(dist, 1, sizeof dist); memset(times, 0, sizeof times); memset( vis, 0, sizeof vis ); //memset( pre, 1, sizeof pre ); while(!que.empty()) que.pop_front();}void build(){ // 处理rt int m,w, a, b, c; rt=1; scanf("%d%d%d", &n, &m, &w); while( m-- ){ scanf("%d%d%d", &a, &b, &c); add(head[a], b, c); add(head[b], a, c); } while( w-- ){ scanf("%d%d%d", &a, &b, &c); add(head[a], b, -c); }}int main(){ // READ int f; scanf("%d",&f); while(f--){ init(); build(); if(SPFA()) printf("NO\n"); else printf("YES\n"); } return 0;}

 

转载于:https://www.cnblogs.com/ts65213/p/3148062.html

你可能感兴趣的文章
Python基础语法
查看>>
4.1.1 硬币游戏
查看>>
获取服务器信息
查看>>
JavaScript_5_对象
查看>>
MyBatis总结五:#{}和${}的用法和区别
查看>>
OO’s Sequence
查看>>
Python利用os模块批量修改文件名
查看>>
发布/订阅
查看>>
Jmeter(二十八)_Docker+Jmeter+Gitlab+Jenkins+Ant(容器化的接口自动化持续集成平台)
查看>>
例题第1章
查看>>
5 - SQL Server 2008 之 四则运算、比较运算、逻辑运算及字符连接运算
查看>>
(原创)speex与wav格式音频文件的互相转换(二)
查看>>
软件测试的发展趋势
查看>>
docker 镜像
查看>>
抽屉的第三方库
查看>>
shell-
查看>>
DNS域名解析
查看>>
HTML和CSS前端教程05-CSS盒模型
查看>>
Java 学习————多线程同步
查看>>
mysql插入数据后返回自增ID的方法
查看>>