POJ3259-负权回路判定
题目:http://vj.acmclub.cn/contest/view.action?cid=316#problem/E
首先要理解题意:其实就是给你一个图让你判断有没有负权回路
因此直接用BallmenFord算法就可以了
特别注意一些问题:path是双向的因此要写两遍
代码:
# include<iostream>
//# include<queue>
# include<cstring> using namespace std; const int INF = ;
const int MAXN = ;
int u[MAXN], v[MAXN], w[MAXN]; int N, M, W, k; int dis[]; bool bellman_ford()
{
bool check = ; memset(dis, INF, sizeof(dis));
dis[] = ; for (int i = ; i < N - ; i++)
{
check = ; for (int j = ; j < k; j++)
{
if (dis[u[j]]<INF&& dis[v[j]] > dis[u[j]] + w[j])
{
check = ;
dis[v[j]] = dis[u[j]] + w[j];
}
} if (check)
return false;
} for (int i = ; i <k; i++)
if (dis[u[i]]<INF&&dis[v[i]] > dis[u[i]] + w[i])
return true;
return false;
} int main()
{
int F, s, e, t;
cin >> F;
while (F--)
{
k = ;
cin >> N >> M >> W; for (int i = ; i <= M; i++)
{
cin >> s >> e >> t;
u[k] = s;
v[k] = e;
w[k] = t;
k++;
u[k] = e;
v[k] = s;
w[k] = t;
k++;
} for (int i = ; i <= W; i++)
{
cin >> s >> e >> t;
u[k] = s;
v[k] = e;
w[k] = -t;
k++; } if (bellman_ford())
cout << "YES" << endl;
else
cout << "NO" << endl;
} //system("pause"); return ;
}
本来是想用一下SPFA的,尝试了一下队列+vector的操作,结果WA了
对vector的用法可能还不不是太熟悉,另外SPFA也没太理解,尤其是用SPFA判断负权回路很麻烦
待我再研究
POJ3259-负权回路判定的更多相关文章
- SPFA穿越虫洞——负权回路得判断
poj3259 题目大意:穿越虫洞可以回到过去(时间--)所以能不能让时间倒流呢,就是判断有没有负权回路这次尝试用SPFA算法,也可以复习一下链式前向星 准备工作,队列q,spfa算法得有点就在于这个 ...
- [ACM] POJ 3259 Wormholes (bellman-ford最短路径,推断是否存在负权回路)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 29971 Accepted: 10844 Descr ...
- POJ 3259 Wormholes Bellman_ford负权回路
Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes ...
- ZOJ 3391 Haunted Graveyard(最短路负权回路)题解
题意:好长...从(0,0)走到(w-1,h-1),墓碑不能走,走到传送门只能进去不能走到其他地方,经过传送门时间会变化w(可能为负),其他地方都能上下左右走.如果能无限返老还童输出Never,走不到 ...
- bellman-ford(可判负权回路+记录路径)
#include<iostream> #include<cstdio> using namespace std; #define MAX 0x3f3f3f3f #define ...
- poj 3259 bellman最短路推断有无负权回路
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 36717 Accepted: 13438 Descr ...
- Bellman-ford算法与SPFA算法思想详解及判负权环(负权回路)
我们先看一下负权环为什么这么特殊:在一个图中,只要一个多边结构不是负权环,那么重复经过此结构时就会导致代价不断增大.在多边结构中唯有负权环会导致重复经过时代价不断减小,故在一些最短路径算法中可能会凭借 ...
- Spfa 求含负权边的最短路 + 判断是否存在负权回路
在Bellman-Ford算法之后,我们总算迎来了spfa算法,其实就如同堆优化Dijkstra算法之于朴素版Dijkstra算法,spfa算法仅仅是对Bellman-Ford算法的一种优化,但是在形 ...
- POJ 3259 Wormholes 邻接表的SPFA判断负权回路
http://poj.org/problem?id=3259 题目大意: 一个农民有农场,上面有一些虫洞和路,走虫洞可以回到 T秒前,而路就和平常的一样啦,需要花费时间走过.问该农民可不可能从某个点出 ...
随机推荐
- C# cs文件表头模版
设置位置:C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplatesCache\CSharp\Web\2 ...
- java-基于JavaMail的Java邮件发送
1.基于JavaMail的Java邮件发送:简单邮件发送 2.基于JavaMail的Java邮件发送:复杂邮件发送
- 关于Cocos2d-x中文乱码问题的解决
方法一: 1.首先,复制下面的代码,创建一个icov,h的头文件,并放在项目目录下 #include "stdlib.h"#include "string.h" ...
- C++ GDI+调用
封装了一个GDI+的使用类 GdiPluss.h #pragma once #include <comdef.h> #include <gdiplus.h> using nam ...
- WaitForSingleObject()
参见:http://blog.csdn.net/xiaobai1593/article/details/6672193 1. 格式 DWORD WaitForSingleObject( HANDLE ...
- 象“[]”、“.”、“->”这类操作符前后不加空格
象“[]”.“.”.“->”这类操作符前后不加空格. #include <iostream> #include <process.h> #include<stdio ...
- nodejs基础 -- Stream流
nodejs 的 Stream 是一个抽象接口,node中有很多对象实现了这个接口.例如,对http服务器发起请求的request对象就是一个Stream,还有stdout(标准输出)也是一个Stre ...
- openal资料转贴
地址:http://blog.sina.com.cn/s/blog_685b5b220100ukbp.html OpenAL简介 OpenAL(Open Audio Library)是专门负责3D定位 ...
- 使用定时器判断确保某个标签有值才执行方法, 控制js代码执行先后顺序
使用定时器判断确保某个标签有值才执行方法: var wait = setInterval(function(){ var diqu = $("#diqu").val(); //确保 ...
- IOS URL scheme
常用URL scheme查询 http://handleopenurl.com/scheme QQ: mqq://新浪微博: weibo:// (sinaweibo://)腾讯微博: tencentw ...