ACM/ICPC 之 Bellman Ford练习题(ZOJ1791(POJ1613))

这道题稍复杂一些,需要掌握字符串输入的处理+限制了可以行走的时间。



ZOJ1791(POJ1613)-Cave Raider

//限制行走时间的最短路
//POJ1613-ZOJ1791
//Time:16Ms	Memory:324K
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;

#define MAX	505
#define MAXT 55
#define MAXS MAXT*3
#define INF 0x3f3f3f3f

struct Edge {
	int u, v, w;
	int t[MAXT], lt;	//lt:开启与关闭时间点总和
}e[MAX];

int n, m, s, t;
int d[MAXT];

void bellman_ford()
{
	memset(d, 0x3f, sizeof(d));
	d[s] = 0;
	for (int i = 1; i <= n; i++)
		for (int j = 0; j < m; j++)
			for (int k = 1; k <= e[j].lt; k += 2)
			{
				int u = e[j].u, v = e[j].v;
				//tu:从u出发到v的时间
				int tu = max(d[u], e[j].t[k - 1]) + e[j].w;
				int tv = max(d[v], e[j].t[k - 1]) + e[j].w;
				if (tu <= e[j].t[k] || tv <= e[j].t[k])	//几次WA是因为没有取‘=‘
				{
					if (tv <= e[j].t[k]) d[u] = min(d[u], tv);
					if (tu <= e[j].t[k]) d[v] = min(d[v], tu);
					break;
				}
			}
}

int main()
{
	char str[MAXS];
	while (scanf("%d", &n), n)
	{
		memset(e, 0, sizeof(e));
		scanf("%d%d%d", &m, &s, &t);
		for (int i = 0; i < m; i++)
		{
			scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w);
			e[i].lt = 1;
			cin.getline(str, MAXS);
			int len = strlen(str);
			for (int j = 0; j < len; j++)
			{
				bool flag = false;	//有无数值
				while (str[j] >= ‘0‘ && str[j] <= ‘9‘)
				{
					e[i].t[e[i].lt] = e[i].t[e[i].lt] * 10 + str[j++] - ‘0‘;
					flag = true;	//已记录数值
				}
				if (flag)	e[i].lt++;
			}
			e[i].t[e[i].lt] = INF;	//偶数时当做+∞,奇数时无用
		}

		bellman_ford();
		if (d[t] == INF) printf("*\n");
		else	printf("%d\n", d[t]);
	}
	return 0;
}
时间: 2024-11-03 20:55:59

ACM/ICPC 之 Bellman Ford练习题(ZOJ1791(POJ1613))的相关文章

ACM/ICPC 之 最短路径-Bellman Ford范例(POJ1556-POJ2240)

两道Bellman Ford解最短路的范例,Bellman Ford只是一种最短路的方法,两道都可以用dijkstra, SPFA做. Bellman Ford解法是将每条边遍历一次,遍历一次所有边可以求得一点到任意一点经过一条边的最短路,遍历两次可以求得一点到任意一点经过两条边的最短路...如 此反复,当遍历m次所有边后,则可以求得一点到任意一点经过m条边后的最短路(有点类似离散数学中邻接矩阵的连通性判定) POJ1556-The Doors 初学就先看POJ2240吧 题意:求从(0,5)到

《ACM/ICPC 算法训练教程》读书笔记一之数据结构(堆)

书籍简评:<ACM/ICPC 算法训练教程>这本书是余立功主编的,代码来自南京理工大学ACM集训队代码库,所以小编看过之后发现确实很实用,适合集训的时候刷题啊~~,当时是听了集训队final的意见买的,感觉还是不错滴. 相对于其他ACM书籍来说,当然如书名所言,这是一本算法训练书,有着大量的算法实战题目和代码,尽管小编还是发现了些许错误= =,有部分注释的语序习惯也有点不太合我的胃口.实战题目较多是比较水的题,但也正因此才能帮助不少新手入门,个人认为还是一本不错的算法书,当然自学还是需要下不少

2014 ACM/ICPC Asia Regional Guangzhou Online Wang Xifeng&#39;s Little Plot HDU5024

一道好枚举+模拟题目.转换思维视角 这道题是我做的,规模不大N<=100,以为正常DFS搜索,于是傻乎乎的写了起来.各种条件限制模拟过程 但仔细一分析发现对每个点进行全部八个方向的遍历100X100X100^8 .100X100个点,每个点在走的时候8中选择,TLE 于是改为另一个角度: 以符合要求的点为拐弯点,朝两个垂直的方向走,求出最远的距离.这样只要对每个点各个方向的长度知道,组合一下对应的就OK. 避免了每个点深搜. PS:搜索的时候x,y写反了,导致构图出现问题,以后用[dy][dx]

HDU 5014 Number Sequence(2014 ACM/ICPC Asia Regional Xi&#39;an Online) 题解

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5014 Number Sequence Problem Description There is a special number sequence which has n+1 integers. For each number in sequence, we have two rules: ● ai ∈ [0,n] ● ai ≠ aj( i ≠ j ) For sequence a and sequ

hdu6206 Apple 2017 ACM/ICPC Asia Regional Qingdao Online

地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6206 题目: Apple Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 530    Accepted Submission(s): 172 Problem Description Apple is Taotao's favouri

ACM ICPC 2008–2009 NEERC MSC A, B, C, G, L

这套题是我上周日, 就是前天打得一场组队赛, 题目不太好找 题目链接:http://codeforces.com/gym/100861 在virtual judge 上也可以提交哦! A ACM ICPC Rules: 题目大意: 有很多所高校参加预选赛, 并在预选赛取得了排名, 但是对于每所学校, 除了MSU有4个名额之外其他大学只有两个名额( 也就是说, 只有每个大学的前2名进决赛(MSU前四名)&& 最多有10个队伍进入决赛), 高中队伍不能进入决赛. 给出预选赛的排名, 输出可以进

2016 ACM/ICPC Asia Regional Shenyang Online 1007/HDU 5898 数位dp

odd-even number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 388    Accepted Submission(s): 212 Problem Description For a number,if the length of continuous odd digits is even and the length

hdu 5868 2016 ACM/ICPC Asia Regional Dalian Online 1001 (burnside引理 polya定理)

Different Circle Permutation Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 208    Accepted Submission(s): 101 Problem Description You may not know this but it's a fact that Xinghai Square is

ACM/ICPC 之 SPFA范例两道(POJ3268-POJ3259)

两道以SPFA算法求解的最短路问题,比较水,第二题需要掌握如何判断负权值回路. POJ3268-Silver Cow Party //计算正逆最短路径之和的最大值 //Time:32Ms Memory:360K #include<iostream> #include<cstring> #include<cstdio> #include<queue> #include<algorithm> using namespace std; #define