poj3259 Wormholes (判负环)【spfa】(模板)
<题目链接>
题目大意:
John的农场里N块地,M条路连接两块地,W个虫洞,虫洞是一条单向路,会在你离开之前把你传送到目的地,就是当你过去的时候时间会倒退Ts。我们的任务是知道会不会在从某块地出发后又回来,看到了离开之前的自己。总的来说,就是看图中有没有负权环。
解题分析:
判负环模板题,下面用的是spfa算法。判负环的依据为:如果在最短路的松弛操作中,存在进入队列次数大于n的点,则说明该图存在负环。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#define N 3010
#define INF 0x3f3f3f3f
#define clr(a,b) (memset(a,b,sizeof(a)))
using namespace std; struct edge{
int to,w,next;
edge(int v=,int w=,int next=-):to(v),w(w),next(next){}
}e[N<<]; int head[N<<],tot;
int vis[N],cnt[N]; //cnt数组统计点进队列的次数
int n,m,s;
int dis[N]; inline void init(){
clr(vis,);clr(head,-);
clr(dis,INF);clr(cnt,);tot=;
}
inline void addedge(int u,int v,int w){
e[tot]=edge(v,w,head[u]);head[u]=tot++;
}
int spfa(){
queue<int>q;
vis[]=;cnt[]=;
dis[]=;q.push();
while(!q.empty()){
int u=q.front();
q.pop();vis[u]=;
for(int i=head[u];~i;i=e[i].next){
int v=e[i].to,w=e[i].w;
if(dis[v]>dis[u]+w){ //最短路松弛
dis[v]=w+dis[u];
if(!vis[v]){
vis[v]=;
cnt[v]++;
if(cnt[v]>n)return ; //如果该点进队列的次数大于n,则存在负环
q.push(v);
}
}
}
}
return ;
}
int main(){
int T,u,v,w;
scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&m,&s);
init();
for(int i=;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w); //普通路段是双向边
addedge(v,u,w);
}
for(int i=;i<=s;i++){ //虫洞表示权值为负的路段,这个是单向边
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,-w);
}
if(spfa())puts("YES");
else puts("NO");
}
}
2018-08-27
poj3259 Wormholes (判负环)【spfa】(模板)的更多相关文章
- POJ3259(Wormholes) 判断负环
题意: 农夫john发现了一些虫洞,虫洞是一种在你到达虫洞之前把你送回目的地的一种方式,FJ的每个农场,由n块土地(编号为1-n),M 条路,和W个 虫洞组成,FJ想从一块土地开始,经过若干条路和虫洞 ...
- 洛谷 P2850 [USACO06DEC]虫洞Wormholes 判负环
虫洞(wormhole) FJ 在农场上闲逛时,发现他的农场里有很多虫洞.虫洞是一条特殊的有向路径,当 FJ 从它的一头走到另一头后,他将被传送到过去的某个时刻.FJ 的每个农场包括 N(1<= ...
- 洛谷P3385判负环——spfa
题目:https://www.luogu.org/problemnew/show/P3385 两种方法,dfs和bfs: 一开始写的dfs,要把dis数组初值赋成0,这样从一个连着负边的点开始搜: 在 ...
- POJ3259 Wormholes 【spfa判负环】
题目链接:http://poj.org/problem?id=3259 Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submis ...
- [poj3259]Wormholes(spfa判负环)
题意:有向图判负环. 解题关键:spfa算法+hash判负圈. spfa判断负环:若一个点入队次数大于节点数,则存在负环. 两点间如果有最短路,那么每个结点最多经过一次,这条路不超过$n-1$条边. ...
- Poj 3259 Wormholes(spfa判负环)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 42366 Accepted: 15560 传送门 Descr ...
- poj3259(spfa判负环)
题目连接:http://poj.org/problem?id=3259 题意:John的农场里N块地,M条路连接两块地,W个虫洞,虫洞是一条单向路,会在你离开之前把你传送到目的地,就是当你过去的时候时 ...
- POJ 3259——Wormholes——————【最短路、SPFA、判负环】
Wormholes Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit St ...
- POJ 3259 Wormholes(SPFA判负环)
题目链接:http://poj.org/problem?id=3259 题目大意是给你n个点,m条双向边,w条负权单向边.问你是否有负环(虫洞). 这个就是spfa判负环的模版题,中间的cnt数组就是 ...
随机推荐
- pygame(class类)调用视图的方法
以下将介绍pygame精灵动画的基础知识,希望对大家有帮助:1.在此,精灵类必须继承pygame.sprite.Sprite并初始化pygame.sprite.Sprite.__init__(self ...
- asp.net mvc 中[Authorize]在IE9以上版本关于FormsAuthentication.SetAuthCookie无效的问题 解决方案
简单的解决方法是,在网站根目录,新增一个浏览器定义文件(browser definition file) 叫“App_Browsers”文件夹,然后里面放一个“IE10.browser”文件即可,网站 ...
- python - wmi模块学习(windwos硬件信息获取)
获取windows操作系统的硬件信息 #!/usr/bin/env python # -*- coding: utf-8 -*- # http://www.cnblogs.com/liu-ke/ im ...
- 【Python】【辅助程序】练手小程序:记录外网动态IP地址
练手小程序 程序作用:对IP实时记录: 1.定时获取外网IP,存储在本地文件中: 编写思路: 1)收集获取外网的API接口 http://bbs.125.la/thread-1383897 ...
- Hard Negative Mning
对于hard negative mining的解释,引用一波知乎: 链接:https://www.zhihu.com/question/46292829/answer/235112564来源:知乎 先 ...
- mysql系列六、mysql创建用户、授权、备份及恢复命令
一.创建用户和授权 下面的操作中,其中someusername为用户名,somepassword为密码,somedbname为数据库名 1.创建用户 create user 'someusername ...
- MyEclipse2017 CI-7的破解
下载了一个最新版的MyEclipse,网上下载了破解工具,按照步骤完成后破解失败.很纳闷,于是网上查看,说是破解器的版本须与MyEclipse的版本对应,不对应的话,是没有效果的.如我的是CI-7版本 ...
- rabbitmq 源码安装
官网地址:rabbitmqhttp://www.rabbitmq.com/releases/rabbitmq-server/官网地址:erlanghttp://erlang.org/download/ ...
- TCP端口转发(centos7)
=============================================== 2019/2/14_第1次修改 ccb_warlock == ...
- python flask安装
windows环境上,打开命令行,输入pip list 检查列表中是否安装过flask 安装flask命令:pip install flask 出现Successfully installed等提 ...