首页 > 技术文章 > 最短路 1333: Funny Car Racing

assult 2014-03-18 11:12 原文

ce了这么多次居然都没发现交错语言了    嗷嗷啊~~!@#¥%……&*

【题意】给一张有向图 求从s点出发到t点话费的最少时间  每段路都有一个开放的时间和一个关闭是时间

 

只要在走那一段路的时候 判断一下要等待多长时间   就行了

 

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<vector>
 5 #include<math.h>
 6 #include<string>
 7 #include<queue>
 8 #define maxx 100000000
 9 
10 using namespace std;
11 struct node{int t;int a;int b;int w;};
12 vector<node > g[1002];
13 bool vis[1002];
14 int d[1002],n;
15 queue<int > q;
16 int spfa(int s,int ans)
17 {
18 
19     memset(vis,false,sizeof(vis));q.push(s); vis[s]=true;
20     for(int i=0;i<=n;i++)
21         d[i]=maxx;
22     d[s]=0;
23     while(!q.empty())
24     {
25         int u;
26         u=q.front();  q.pop();vis[u]=false;
27         for(int i=0;i<g[u].size();i++)
28         {
29             int v,time;
30             v=g[u][i].t; time=g[u][i].w;
31 
32             int t=d[u]%(g[u][i].a+g[u][i].b);
33             int temp=0;
34             if(t<=g[u][i].a)
35             {
36                 int tt;
37                 tt=t+time;
38                 if(tt<=g[u][i].a)
39                     temp=0;
40                 else
41                 {
42                     temp=g[u][i].a+g[u][i].b-t;
43                 }
44             }
45             else
46             {
47                 temp=g[u][i].a+g[u][i].b-t;
48             }
49             if(d[u]+temp+time<d[v])
50             {
51                 d[v]=d[u]+temp+time;
52                 if(!vis[v])
53                 {
54                     q.push(v);
55                     vis[v]=true;
56                 }
57             }
58         }
59     }
60     return d[ans];
61 }
62 
63 int main()
64 {
65     int m,s,t,e,w,a,b,p=1,start,final1;
66     while(scanf("%d%d%d%d",&n,&m,&start,&final1)>0)
67     {
68         for(int i=0;i<=n;i++)
69             g[i].clear();
70         for(int i=0;i<m;i++)
71         {
72             scanf("%d%d",&a,&b);
73             scanf("%d%d%d",&s,&e,&w);
74             if(s<w)
75                 continue;
76             node temp;
77             temp.t=b;   temp.a=s;  temp.b=e;  temp.w=w;
78             g[a].push_back(temp);
79         }
80         printf("Case %d: %d\n",p++,spfa(start,final1));
81     }
82     return 0;
83 }

 

推荐阅读