洛谷2850 【Usaco2006 Dec】虫洞Wormholes SPFA
问题描述
John在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前)。John的每个农场有M条小路(无向边)连接着N (从1..N标号)块地,并有W个虫洞。其中1<=N<=500,1<=M<=2500,1<=W<=200。 现在John想借助这些虫洞来回到过去(出发时刻之前),请你告诉他能办到吗。 John将向你提供F(1<=F<=5)个农场的地图。没有小路会耗费你超过10000秒的时间,当然也没有虫洞回帮你回到超过10000秒以前。
spfa判负环,以前写spfa都是bfs,这次看了看黄学长的dfs的spfa,感觉写起来也是很简单的。
只要看dfs外的点是否有回来更新它就可以了。
注意虫洞是单向边,小路是双向边。
// 虫洞 spfa判负环
#include<bits/stdc++.h>
using namespace std;
int T,n,m,W,cnt;
int head[],dis[];
bool vis[],flag;
struct edge{
int next,to,w;
}e[];
inline int read(){
int x=,f=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
void ins(int u,int v,int w)
{e[++cnt].to=v;e[cnt].next=head[u];head[u]=cnt;e[cnt].w=w;}
void insert(int u,int v,int w){
ins(u,v,w);ins(v,u,w);
}
void spfa(int x){
vis[x]=;
for(int i=head[x];i;i=e[i].next){
int s=e[i].to;
if(dis[s]>dis[x]+e[i].w){ if(vis[s]){flag=;return;}
else{
dis[s]=dis[x]+e[i].w;
vis[s]=;
spfa(s);
}
}
}
vis[x]=;
}
bool judge(){
memset(dis,,sizeof dis);
memset(vis,,sizeof vis);
flag=;
for(int i=;i<=n;i++){
spfa(i);
if(flag)return ;
}
return ;
}
int main(){
scanf("%d",&T);
while(T--){
n=read();m=read();W=read();
int u,v,w;
memset(head,,sizeof head);
for(int i=;i<=m;i++){
u=read();v=read();w=read();
insert(u,v,w);
}
for(int i=;i<=W;i++){
u=read();v=read();w=read();
ins(u,v,-w);
}
if(judge())printf("YES\n");
else printf("NO\n");
}
return ;
}
洛谷2850 【Usaco2006 Dec】虫洞Wormholes SPFA的更多相关文章
- NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
原文链接https://www.cnblogs.com/zhouzhendong/p/9258043.html 题目传送门 - 洛谷P3953 题目传送门 - Vijos P2030 题意 给定一个有 ...
- 洛谷P1144 最短路计数(SPFA)
To 洛谷.1144 最短路计数 题目描述 给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. 输入输出格式 输入格式: 输入第一行包含2个正整数N,M ...
- 【题解】洛谷P2296 [NOIP2014TG] 寻找道路(SPFA+DFS)
题目来源:洛谷P2296 思路 一开始看还以为是一道水题 虽然本来就挺水的 本道题的难点在于如何判断是否路径上的点都会直接或者间接连着终点 我们需要在一开始多建一个反向图 然后从终点DFS回去 把路径 ...
- 洛谷 P2296 寻找道路【bfs+spfa】
反向建边bfs出不能到t的点,然后对每个能到这些点的点打上del标记,然后spfa的时候不经过这些点即可 #include<iostream> #include<cstdio> ...
- 洛谷 P1462 通往奥格瑞玛的道路(spfa+二分搜索)(4boy)
原题:http://www.luogu.org/problem/show?pid=1462#sub 4boy: 大意:给出n个城市,有m条路,每经过一个城市都要交钱,每经过一条道路都要扣HP,有HP上 ...
- 洛谷 P1462 通往奥格瑞玛的道路——二分+spfa
上一波链接 https://www.luogu.org/problem/P1462 这道题我们考虑二分答案 然后每次跑一次spfa判断是否能够到达n点 tips:在不考虑负权边的前提下我们写最短路最好 ...
- 洛谷P4644 [USACO2005 Dec]Cleaning Shifts 清理牛棚 [DP,数据结构优化]
题目传送门 清理牛棚 题目描述 Farmer John's cows, pampered since birth, have reached new heights of fastidiousness ...
- Bzoj1692 洛谷P2870 [Usaco2007 Dec]队列变换
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1570 Solved: 656 Description FJ打算带他的N(1 <= N <= ...
- 洛谷 P2761 软件补丁问题 【spfa】
-为什么最短路的题会出现在网络流24里?? 因为范围是15所以直接把每个状态作为一个点,向它能转移到的点连有向边即可.可以不用建图(据说建图存不下?),直接枚举m个转移方案.位运算比较麻烦注意不要写错 ...
随机推荐
- CentOS 安装 PHP7
下载地址:http://php.net/downloads.php 上传目录:/usr/local/src 安装目录:/usr/local/php ## 参考资料 PHP官网: http://php. ...
- SpringMVC-注解映射器和适配器_20190323
1 注解映射器和适配器 1.1 注解映射器spring3.1之前默认加载映射器是org.springframework.web.servlet.mvc.annotation.DefaultAnnota ...
- MyBatis中关于SQL标签的用法(重用SQL 代码段)
一. 没用sql标签前的SQL映射代码: <select id="findById" resultType="cn.tedu.mybatis.entity.User ...
- tar 命令man说明
TAR(1) User Commands TAR(1) NAME tar - manual page for tar 1.26 SYNOPSIS tar [OPTION...] [FILE]... D ...
- 《Craking the Coding interview》python实现---02
###题目:翻转一个字符串###思路:从字符串的最后一位开始,依次取###实现:伪代码.函数.类实现#伪代码: #01string=sNew_s=""for i in range( ...
- Hibernate简单的保存操作
1.这里面我想先说一下session对象的创建,这个是我们操纵数据库的核心对象,因此首先我们应该获取相应的session对象. public static Configuration cfg; pub ...
- 紫书 习题 8-20 UVa 1620 (找规律+求逆序对)
这道题看了半天没看出什么规律, 然后看到别人的博客, 结论是当n为奇数且逆序数为奇数的时候 无解, 否则有解.但是没有给出证明, 在网上也找到详细的证明--我也不知道是为什么-- 求逆序对有两种方法, ...
- Linux初学习
Linux Linux运行与关闭 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户.多任务.支持多线程和多 CPU 的操作系统. Linux ...
- javascript取前n天的日期两种方法
方法一: var d = new Date(); d = new Date(d.getFullYear(),d.getMonth(),d.getDate()-n); 方法二: var now = ne ...
- 今天遇到的一个诡异的core和解决 std::sort
其实昨天开发pds,就碰到了core,我还以为是内存不够的问题,或者其他问题. 今天把所有代码挪到了as这里,没想到又出core了. 根据直觉,我就觉得可能是std::sort这边的问题. 上网一搜, ...