UVA 12661(动态权值+最短路,dij)
题意:赛车背景,给你n个节点,m条边的图以及起点和终点;其中每条边的信息包括u(起点),v(终点),a(开启的时间),b(关闭的时间),d(通过这条道路的时间);求最短通过的时间,其中车在进的时候,保证时间足够能走出去;否则需要等一些分钟;
思路:dij真是万能的,把固定权值改成动态的即可;
其中改变权值的语句很关键,并且推出的规律有个前提就是保证道路打开的时间一定大于等于通过该条道路的时间,否则相当于道路不通,被我忽略了,WA了3遍,可惜;
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <sstream>
#include <queue>
#include <vector>
#define repu(i,a,b) for(int i=a;i<b;i++)
using namespace std;
#define N 330
int v[N],t[N];
const int maxn=;
const int INF=0x3f3f3f3f;
int rode[maxn];
int c[N][N],p[N][N];
int st = ,ed,k;
struct Edge
{
int u,v,t1,t2,d;
Edge(int u, int v, int t1,int t2, int d):u(u),v(v),t1(t1),t2(t2),d(d) {}
};
struct qnode
{
int u;
int d;
qnode(int u, int d):u(u), d(d) {}
bool operator < (const qnode a)const
{
return d > a.d;
}
}; int GetDist(int t, Edge e)
{
t %= (e.t1 + e.t2);
if(e.d <= e.t1)///坑,一开始没加上
{
if(t >= e.t1 || e.t1 - t < e.d)
return e.t1 +e.t2 -t+e.d;
else if(e.d + t <= e.t1)
return e.d;
}
return INF;
}
struct Dijkstra
{
int n;
vector<int> G[maxn];
vector<Edge> edge;
int d[maxn];
bool vis[maxn];
void init(int n)
{
this->n=n;
for(int i=; i<=n; i++)
{
G[i].clear();
vis[i]=;
d[i]=INF;
}
edge.clear();
}
void AddEdge(int u, int v,int c,int e, int f)
{
G[u].push_back(edge.size());
edge.push_back(Edge(u,v,c,e,f));
}
int dijkstra(int st,int ed)
{
int sum = ;
memset(vis, , sizeof vis);
repu(i,,n+)
d[i] = INF;
priority_queue<qnode> q;
d[st]=;
q.push(qnode(st, ));
while(!q.empty())
{
qnode x=q.top();
q.pop();
if(vis[x.u])
continue ;
vis[x.u]=true;
if(x.u == ed)
return d[ed];
for(int i=; i<G[x.u].size(); i++)
{
Edge& e=edge[G[x.u][i]];
int vv = GetDist(d[x.u], e);///推这时候的权值
int tmp=d[x.u]+vv;///过这条边需要的时间
if(d[e.v] > tmp)
{
d[e.v]=tmp;
q.push(qnode(e.v, d[e.v]));
}
/// if(d[e.v] > d[x.u]+e.d)///原句
/// {
/// d[e.v]=d[x.u]+e.d;
/// q.push(qnode(e.v, d[e.v]));
/// }
}
}
return d[ed];
}
} dij;
int main()
{
int n,m,kase =;
while(~scanf("%d%d%d%d",&m,&n,&st,&ed))
{
dij.init(m);
memset(t,,sizeof(t));
int a,b,f,c,e;
repu(i,,n)
{
scanf("%d%d%d%d%d",&a,&b,&c,&e,&f);
dij.AddEdge(a,b,c,e,f);
}
dij.dijkstra(st,ed);
printf("Case %d: %d\n",kase++,dij.d[ed]);
}
return ;
}
UVA 12661(动态权值+最短路,dij)的更多相关文章
- Wormholes 最短路判断有无负权值
Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes ...
- UVA 548.Tree-fgets()函数读入字符串+二叉树(中序+后序遍历还原二叉树)+DFS or BFS(二叉树路径最小值并且相同路径值叶子节点权值最小)
Tree UVA - 548 题意就是多次读入两个序列,第一个是中序遍历的,第二个是后序遍历的.还原二叉树,然后从根节点走到叶子节点,找路径权值和最小的,如果有相同权值的就找叶子节点权值最小的. 最后 ...
- luogu3224 永无乡(动态开点,权值线段树合并)
luogu3224 永无乡(动态开点,权值线段树合并) 永无乡包含 n 座岛,编号从 1 到 n ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 n 座岛排名,名次用 1 到 n 来表示.某些 ...
- uva 1411 Ants (权值和最小的完美匹配---KM算法)
uva 1411 Ants Description Young naturalist Bill studies ants in school. His ants feed on plant-louse ...
- [NOIP2015模拟10.27] [JZOJ4270] 魔道研究 解题报告(动态开点+权值线段树上二分)
Description “我希望能使用更多的魔法.不对,是预定能使用啦.最终我要被大家称呼为大魔法使.为此我决定不惜一切努力.”——<The Grimoire of Marisa>雾雨魔理 ...
- [BZOJ 3295] [luogu 3157] [CQOI2011]动态逆序对(树状数组套权值线段树)
[BZOJ 3295] [luogu 3157] [CQOI2011] 动态逆序对 (树状数组套权值线段树) 题面 给出一个长度为n的排列,每次操作删除一个数,求每次操作前排列逆序对的个数 分析 每次 ...
- hdu1245 两个权值的最短路
题意: 求s到t的最短路,如果路径相同求那么要求另一个权值尽可能的小. 思路: 水题,就是spfa的比较那个地方多了一个可以更新的机会,当(s_x[xin] > s_x[ ...
- UVA 11090 Going in Cycle!! 环平均权值(bellman-ford,spfa,二分)
题意: 给定一个n个点m条边的带权有向图,求平均权值最小的回路的平均权值? 思路: 首先,图中得有环的存在才有解,其次再解决这个最小平均权值为多少.一般这种就是二分猜平均权值了,因为环在哪也难以找出来 ...
- 动态求区间K大值(权值线段树)
我们知道我们可以通过主席树来维护静态区间第K大值.我们又知道主席树满足可加性,所以我们可以用树状数组来维护主席树,树状数组的每一个节点都可以开一颗主席树,然后一起做. 我们注意到树状数组的每一棵树都和 ...
随机推荐
- 第二章:Posix IPC
2.1:概述 以下三种类型的IPC合称为“Posix IPC”: Posix消息队列 Posix信号量 Posix共享内存区 Posix IPC在访问它们的函数和描述它们的信息上有一些类似点.本章讲述 ...
- centos6.6编译安装lnmp系列之nginx
简介: 环境:虚拟机+centos6.6 Cmake下载地址:http://www.cmake.org/files/v3.0/cmake-3.0.2.tar.gz Nginx 下载地址: http:/ ...
- [问题2015S01] 复旦高等代数 II(14级)每周一题(第二教学周)
[问题2015S01] 设 \(M_n(\mathbb{R})\) 是 \(n\) 阶实方阵全体构成的实线性空间, \(\varphi\) 是 \(M_n(\mathbb{R})\) 上的线性变换, ...
- PCL点云库:Kd树
Kd树按空间划分生成叶子节点,各个叶子节点里存放点数据,其可以按半径搜索或邻区搜索.PCL中的Kd tree的基础数据结构使用了FLANN以便可以快速的进行邻区搜索.FLANN is a librar ...
- 标准DSO设置
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- log4j2的使用
预备知识 日志级别:log4j默认六个级别,即trace.debug.info.warn.error.fatal ,对应意味着该消息为追踪.调试.普通信息.警告.错误.严重错误.可以根据需要子定义其他 ...
- Consul Template的简单使用
Consul Template的使用 1安装 地址 https://github.com/hashicorp/consul-template/releases wget https://release ...
- IOS开发数据库篇—SQLite模糊查询
IOS开发数据库篇—SQLite模糊查询 一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: // // YYPerson.h // 03- ...
- Entity Framework 教程
http://www.cnblogs.com/lsxqw2004/category/266012.html
- Python centOS 安装
Python 默认版本是2.4.3的,如果需要使用其他版本的需要下载安装 1.下载安装 # cd /usr/local/src # wget https://www.python.org/ftp/py ...