poj3259(Wormholes)

题目大意:

一个农夫在农场发现了许多奇怪的虫洞,这些虫洞是单向的,已知N个农场,M条正常的路径,W条虫洞,虫洞可以使时间倒流,农主通过正常的路径花费一定的时间,这个路径是双向的,
通过虫洞的路径可以使时间倒流,农主是狂热的旅行者,他的目的是通过正常路径和虫洞,能否回到最初的起点的时刻!

解题思路:

bellman_ford算法,看是否有负权回路,有负权回路说明农主到达最初出发的农场“1”的权值小于0,也就意味着农主能通过虫洞的时光倒流回到最初出发农场的那个时刻,注意单向边和双向边,和数组的大小。

代码:

 1 #include <algorithm>
2 #include <iostream>
3 #include <sstream>
4 #include <cstdlib>
5 #include <cstring>
6 #include <cstdio>
7 #include <string>
8 #include <bitset>
9 #include <vector>
10 #include <queue>
11 #include <stack>
12 #include <cmath>
13 #include <list>
14 #include <map>
15 #include <set>
16 using namespace std;
17 /***************************************/
18 #define ll long long
19 #define int64 __int64
20 /***************************************/
21 const int INF = 0x7f7f7f7f;
22 const double eps = 1e-8;
23 const double PIE=acos(-1.0);
24 const int d1x[]= {0,-1,0,1};
25 const int d1y[]= {-1,0,1,0};
26 const int d2x[]= {0,-1,0,1};
27 const int d2y[]= {1,0,-1,0};
28 const int fx[]= {-1,-1,-1,0,0,1,1,1};
29 const int fy[]= {-1,0,1,-1,1,-1,0,1};
30 /***************************************/
31 void openfile()
32 {
33 freopen("data.in","rb",stdin);
34 freopen("data.out","wb",stdout);
35 }
36 /**********************华丽丽的分割线,以上为模板部分*****************/
37 struct no
38 {
39 int u,v;
40 int cost;
41 } node[6000];
42 int dis[550];
43 bool bellman_ford(int n,int edgenum)
44 {
45 int i,j;
46 for(i=1; i<=n; i++)
47 dis[i]=INF;
48 dis[1]=0;
49 for(i=1; i<=n-1; i++)
50 for(j=0; j<edgenum; j++)
51 if (dis[node[j].v]>dis[node[j].u]+node[j].cost)
52 dis[node[j].v]=dis[node[j].u]+node[j].cost;
53 bool flag=0;
54 for(j=0; j<edgenum; j++)
55 if (dis[node[j].v]>dis[node[j].u]+node[j].cost)
56 flag=1;
57 return flag;
58 }
59 int main()
60 {
61 int cas;
62 scanf("%d",&cas);
63 while(cas--)
64 {
65 int n,m,w;
66 int i,j;
67 scanf("%d%d%d",&n,&m,&w);
68 int x,y,val;
69 int d=0;
70 for(i=0; i<m; i++)
71 {
72 scanf("%d%d%d",&x,&y,&val);
73 node[d].u=x;
74 node[d].v=y;
75 node[d].cost=val;
76 d++;
77 node[d].u=y;
78 node[d].v=x;
79 node[d].cost=val;
80 d++;
81 }
82 for(i=m; i<m+w; i++)
83 {
84 scanf("%d%d%d",&x,&y,&val);
85 node[d].u=x;
86 node[d].v=y;
87 node[d].cost=-val;
88 d++;
89 }
90 if (bellman_ford(n,d))
91 printf("YES\n");
92 else
93 printf("NO\n");
94 }
95 return 0;
96 }

poj3259(Wormholes),布布扣,bubuko.com

时间: 2024-08-07 03:20:56

poj3259(Wormholes)的相关文章

poj3259(spfa)

自己的第一道spfa,纪念一下,顺便转载一下spfa的原理.先po代码: #include <iostream> #include <queue> using namespace std; const int MAX = 999999; const int MAXN = 501; int minimum(int a, int b){ return a > b ? b : a; } int main() { int t; cin >> t; while (t--){

poj 3259 Wormholes (Bellman-ford)

链接: poj 3259 题意:一个famer有一些农场,这些农场里面有一些田地,田地里面有一些虫洞,田地和田地之间有路(双向的),即从a到b和从b到a时间都为c.虫洞的性质:时间倒流.即通过虫洞从a到b所花时间为 -c(单向的).问从某块田出发,他能否通过虫洞的性质回到出发点前 思路:这题实际就是判断是否存在负权回路,可以用SPFA算法或Bellman-Ford算法判断.若存在负权回路,则可以达到目的,否则不可以. Bellman-ford算法 #include<stdio.h> #incl

北大ACM暑期培训课程目录(三)

本文出自:http://blog.csdn.net/svitter 一.图的生成树 .必然含有n-1条边. .无向带权图. .如何求最小生成树. .prime | kruskal Prime: 从点里面找一个最短的边. kruskal: 从边里面找. .密集图使用邻接矩阵来存储. .稀疏图用邻接表来存储. .开一个邻接表,一个vector的一维数组. 时间复杂度(ElogV) 一般情况下邻接表更加优秀 题目:poj1258(邻接矩阵) 使用prime+堆完成.priority_queue(就是二

bzoj usaco 金组水题题解(1)

UPD:我真不是想骗访问量TAT..一开始没注意总长度写着写着网页崩了王仓(其实中午的时候就时常开始卡了= =)....损失了2h(幸好长一点的都单独开了一篇)....吓得赶紧分成两坨....TAT.............. —————————————————————————————————————————————————————————————————————————————— 写(被虐)了整整一个月b站上usaco的金组题...然而到现在总共只写了100道上下TAT(当然是按AC人数降序排

(转载)ACM训练计划,先过一遍基础再按此拼搏吧!!!!

ACM大量习题题库 ACM大量习题题库 现在网上有许多题库,大多是可以在线评测,所以叫做Online Judge.除了USACO是为IOI准备外,其余几乎全部是大学的ACM竞赛题库. USACO http://ace.delos.com/usacogate 美国著名在线题库,专门为信息学竞赛选手准备 TJU http://acm.tongji.edu.cn/ 同济大学在线题库,唯一的中文题库,适合NOIP选手 ZJU http://acm.zju.edu.cn/ 浙江大学在线题库 JLU htt

POJ题目(转)

http://www.cnblogs.com/kuangbin/archive/2011/07/29/2120667.html 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (

牛人的ACM经验 (转)

一:知识点 数据结构: 1,单,双链表及循环链表 2,树的表示与存储,二叉树(概念,遍历)二叉树的 应用(二叉排序树,判定树,博弈树,解答树等) 3,文件操作(从文本文件中读入数据并输出到文本文 件中) 4,图(基本概念,存储结构,图的运算) 数学知识 1,离散数学知识的应用(如排列组合.简单的图论,数 理逻辑) 2,数论知识 3,线性代数 4,组合代数 5,计算几何 二 算法 1,排序算法(冒抛法,插入排序,合并排序,快速排 序,堆排序) 2,查找(顺序查找,二分发) 3,回溯算法 4,递归算

POJ题目分类(转)

初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.     (2)最短路径算法(dijkstra,bellman-ford,floyd,hea

使用 IDEA 创建 Maven Web 项目 (异常)- Disconnected from the target VM, address: &#39;127.0.0.1:59770&#39;, transport: &#39;socket&#39;

运行环境: JDK 版本:1.8 Maven 版本:apache-maven-3.3.3 IDEA 版本:14 maven-jetty-plugin 配置: <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <configuration> <webAppSourceDirectory>${pro