博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3259 Wormholes 虫洞(负权最短路,负环)
阅读量:5263 次
发布时间:2019-06-14

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

 

 

 

题意:

  给一个混合图,求判断是否有负环的存在,若有,输出YES,否则NO。有重边。

思路:

  这是spfa的功能范围。一个点入队列超过n次就是有负环了。因为是混合图,所以当你跑一次spfa时发现没有负环,但是负环仍可能存在,因为有向边!

  但是单源最短路也有起点啊,难道穷举起点?不用,负环是必须有某些边是带负权的,那么我们只要穷举负权边的起点就行了,因为单单跑一次spfa不能保证能遍历所有点,但是如果穷举负权边起点还没有找到负环,那么负环不可能存在(剩下的都是正权,怎么可能有负环)。

 

1 //#include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #define LL long long 8 #define pii pair
9 #define INF 0x7f7f7f7f10 using namespace std;11 const int N=550;12 int n, m, edge_cnt;13 vector
vect[N];14 struct node15 {16 int from, to, val;17 node(){};18 node(int f,int t,int v):from(f),to(t),val(v){};19 }edge[600000];20 21 22 void add_node(int from,int to,int val)23 {24 edge[edge_cnt]=node(from,to,val);25 vect[from].push_back(edge_cnt++);26 }27 28 int dis[N], inq[N], cnt[N];29 int spfa(int s)//模板30 {31 memset(inq,0,sizeof(inq));32 memset(cnt,0,sizeof(cnt));33 memset(dis,0x7f,sizeof(dis));34 deque
que(1,s);35 inq[s]=1;36 dis[s]=0;37 38 while(!que.empty())39 {40 int x=que.front();41 que.pop_front();42 inq[x]=0;43 for(int i=0; i
dis[x]+e.val)47 {48 dis[e.to]=dis[x]+e.val;49 if(!inq[e.to])50 {51 if(++cnt[e.to]>n) return false;52 inq[e.to]=1;53 que.push_back(e.to);54 }55 }56 }57 }58 return true;59 }60 61 int main()62 {63 freopen("input.txt", "r", stdin);64 int a, b, c, t, w;65 cin>>t;66 while(t--)67 {68 scanf("%d%d%d",&n,&m,&w);69 edge_cnt=0;70 memset(edge,0,sizeof(edge));71 for(int i=0; i<=n; i++) vect[i].clear();72 73 for(int i=0; i
ver;80 for(int i=0; i
AC代码

 

转载于:https://www.cnblogs.com/xcw0754/p/4662672.html

你可能感兴趣的文章
CSS盒子的浮动
查看>>
字典:NSDictionary的应用举例
查看>>
update中加入select
查看>>
批量执行SQL文件
查看>>
13. 用Roberts、Sobel、Prewitt和Laplace算子对一幅灰度图像进行边缘检测。观察异同。...
查看>>
1月21号 UITabBarController
查看>>
RegExp正则表达式内容
查看>>
centos6.5安装redis4.0
查看>>
Spring核心概念之AOP
查看>>
xml转换成java对象
查看>>
初探ReactJS.NET 开发
查看>>
微软开源全新的文档生成工具DocFX
查看>>
Mybatis @ResultMap复用@Result
查看>>
hdu 2084 数塔
查看>>
学习搭建一个小网站_3_安装NodeJS模块_建立express
查看>>
2019.01.21王苛震作业
查看>>
在linux下如何判断是否已经安装某个软件?
查看>>
解读Secondary NameNode的功能
查看>>
用委托实现对List的常用方法提取
查看>>
开发、测试、测试开发
查看>>