POJ3259(虫洞)
题目大意:给你一张图,先输入m条双向边(权值为正),再输入w条单向边(权值为负),判断是否有负环
题目思路:bellman-ford或者SPFA都行,我用的是SPFA(因为和POJ1860类似,就不加详细注释了)
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cctype>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <climits>
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
using namespace std;
#define gamma 0.5772156649015328606065120 //欧拉常数
#define MOD 1000000007
#define inf 0x3f3f3f3f
#define N 1001000
#define maxn 300000
typedef long long LL;
typedef pair<int,int> PII; int n;
struct Node
{
int over; ///终点
int v; ///权值
int next;
} node[5500];
int n_cnt,l[505]; ///头节点
int vis[505],d[505],cnt[505]; void init()
{
memset(l,-1,sizeof(l));
memset(d,inf,sizeof(d)); ///到节点需要的花费
memset(vis,0,sizeof(vis)); ///是否在队列中
memset(cnt,0,sizeof(cnt)); ///判断有负环的标记(入队超过n次就有负环)n是题目所给节点数
n_cnt=0;
} void add(int &x,int &y,int &v)
{
node[n_cnt].over=y;
node[n_cnt].v=v;
node[n_cnt].next=l[x];
l[x]=n_cnt++;
} int SPFA()
{
int i,j;
queue<int>q;
q.push(1);
d[1]=0;
while(!q.empty())
{
int i=q.front();
q.pop();
vis[i]=0;
if(++cnt[i]>n) return 1;
for(j=l[i]; j!=-1; j=node[j].next)
{
int pos=node[j].over;
if(d[pos]>d[i]+node[j].v)
{
d[pos]=d[i]+node[j].v;
if(!vis[pos])
{
q.push(pos);
vis[pos]=1;
}
}
}
} return 0;
} int main()
{
int i,j,group,m,w,x,y,v;
//freopen("lxx.txt","r",stdin);
scanf("%d",&group);
while(group--)
{
init();
scanf("%d%d%d",&n,&m,&w);
for(i=0; i<m; ++i)
{
scanf("%d%d%d",&x,&y,&v);
add(x,y,v);
add(y,x,v);
}
for(i=0; i<w; ++i)
{
scanf("%d%d%d",&x,&y,&v);
v=-v;
add(x,y,v);
}
if(SPFA())printf("YES\n");
else printf("NO\n");
}
return 0;
}
POJ3259(虫洞)的更多相关文章
- POJ-3259 Wormholes---SPFA判断有无负环
题目链接: https://vjudge.net/problem/POJ-3259 题目大意: 农夫约翰在探索他的许多农场,发现了一些惊人的虫洞.虫洞是很奇特的,因为它是一个单向通道,可让你进入虫洞的 ...
- poj3259 Wormholes(Bellman-Ford判断负圈)
https://vjudge.net/problem/POJ-3259 一开始理解错题意了,以为从A->B一定得走路,B->A一定得走虫洞.emmm其实回来的时候可以路和虫洞都可以走,只要 ...
- POJ3259 :Wormholes(SPFA判负环)
POJ3259 :Wormholes 时间限制:2000MS 内存限制:65536KByte 64位IO格式:%I64d & %I64u 描述 While exploring his many ...
- SPFA穿越虫洞——负权回路得判断
poj3259 题目大意:穿越虫洞可以回到过去(时间--)所以能不能让时间倒流呢,就是判断有没有负权回路这次尝试用SPFA算法,也可以复习一下链式前向星 准备工作,队列q,spfa算法得有点就在于这个 ...
- poj3259 Wormholes【Bellman-Ford或 SPFA判断是否有负环 】
题目链接:poj3259 Wormholes 题意:虫洞问题,有n个点,m条边为双向,还有w个虫洞(虫洞为单向,并且通过时间为倒流,即为负数),问你从任意某点走,能否穿越到之前. 贴个SPFA代码: ...
- POJ3259 Wormholes 【spfa判负环】
题目链接:http://poj.org/problem?id=3259 Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submis ...
- hzwer模拟赛 虫洞
[题目描述] N个虫洞,M条单向跃迁路径.从一个虫洞沿跃迁路径到另一个虫洞需要消耗一定量的燃料和1单位时间.虫洞有白洞和黑洞之分.设一条跃迁路径两端的虫洞质量差为delta. 1.从白洞跃迁到黑洞,消 ...
- poj3259 bellman——ford Wormholes解绝负权问题
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 35103 Accepted: 12805 Descr ...
- poj3259 最短路判环
题意:有一些点.一些道路和一些虫洞,道路是双向的,连接两点,花费正的时间,而虫洞是单向的,连接两点,可以使时间倒退,求是否能够回到过去. 只要明确回到过去其实就是当出现一个负环的时候,不断沿这个环走, ...
随机推荐
- Unity3D 图形问题之怎样使用水?
怎样使用水? 注意:本页所述内容仅仅适用于台式机编辑器模式. Unity 的标准资源和专业版标准资源包 (Standard Assets and Pro Standard Assets pack ...
- 豆瓣电台笔记3:cell添加从中间向两侧放大的动画
步骤: 1.设置动画属性的初始值 cell.layer.transform = CATransform3DMakeScale(0.1,0.1,1) 2.在指定时间内执行动画 UIView.animat ...
- Bootstrap-初步学习
<!DOCTYPE html> <html> <head lang="en"> <meta charset="utf-8&quo ...
- 用户自定义类型《lua程序设计》 28章 笔记
本实例实现一种很简单的类型------布尔数组.C语言可以实现将每个布尔值存储在一个bit中,从而减少内存用量. 必须的一些宏 Code Snippet #defineBITS_PER_WORD (C ...
- Visual Studio提示“无法启动IIS Express Web服务器”或者“无法连接Web服务器IIS Express ”的解决方法
解决办法:找到程序根目录,删除隐藏的.vs文件夹即可. 问题原因:一般是项目拷贝或者系统设置变更所造成的.
- GuozhongCrawler系列教程 (2) CrawTaskBuilder具体解释
GuozhongCrawler是分层架构.要高速学习CrawlTask独立的配置多少要了解框架的源码.所以CrawTaskBuilder提供要更加扁平且易于理解的的方式创建CrawTask 方法具体资 ...
- Silverlight Telerik RadGridView动态增删行及行列操作(转载)
最近使用一直使用第三方控件Telerik,版本 2011 Q1,一直使用显示控件RadGridView,使用起来比DataGird好使, 也发现有控件问题. radgridview.BeginInse ...
- css3中-moz、-ms、-webkit,-o分别代表的意思
这种方式在业界上统称:识别码.前缀 //-ms代表[ie]内核识别码 //-moz代表火狐[firefox]内核识别码 //-webkit代表谷歌[chrome]/苹果[safari]内核识别码 // ...
- 206. Reverse Linked List【easy】
206. Reverse Linked List[easy] Reverse a singly linked list. Hint: A linked list can be reversed eit ...
- 在Linux命令行下发送html格式的邮件
在Linux利用formail+sendmail来发送带图片的邮件 formail接收html格式的文件作为邮件的内容,这样就可以解决发送带图片邮件的问题了,因为html中可以插入图片,只要给出的im ...