CSU 1333: Funny Car Racing 最短路

题目连接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1333

题意:给你一个n个顶点,m条边(每条边都有三个参数,开放时间,关闭时间,和通过这条边的时间)的有向图;

要你求从s 到 t 的最短路;dijkstra算法可解;

坑点:我用的是队列优化+Vector存储每条边; 在每次调用dijkstra后,必须初始化邻接表,在这个地方坑了好久,这是第二次了,以后记住 如果用vector就要初始化~

附上代码:

#include 
#include 
#include 
#include 
#include 
#include 
const int INF=999999999;
using namespace std;
typedef pair P;
int n,m,s,t;
struct edge
{
  int to;
  int open;
  int close;
  int cost;
};
vectorG[330];
int d[330];
void init()
{
  for(int i=0;i<330;i++)G[i].clear();
}
void dijkstra()
{
  priority_queue,greater

>que; for(int i=0;i<320;i++)d[i]=INF; d[s]=0; que.push(P(0,s)); while(!que.empty()) { P p=que.top(); que.pop(); int v=p.second; if(d[v]=e.cost) { if(d[e.to]>tmp+e.cost) { d[e.to]=tmp+e.cost; que.push(P(d[e.to],e.to)); } } else if(e.open>=e.cost) { if(d[e.to]>tmp+e.cost+mod-re) { d[e.to]=tmp+e.cost+mod-re; que.push(P(d[e.to],e.to)); } } } } } int main() { int test=1; while(scanf("%d%d%d%d",&n,&m,&s,&t)!=EOF) { for(int i=0;i



你可能感兴趣的:(ACM---最短路)