zoukankan      html  css  js  c++  java
  • poj 1724 ROADS

     1 http://poj.org/problem?id=1724
     2 题目大意:单向边最短路问题,但是每条边都有一个费用,要求你的最短路方案的总的花费不能超过限制。
     3 
     4 BFS+优先队列优化
     5 因为题目要求的是在给定费用下的最短距离,所以 以距离优先建队列 广搜
     6 
     7 #include<stdio.h>
     8 #include<string.h>
     9 #include<vector>
    10 #include<queue>
    11 using namespace std;
    12 #define maxn 20000
    13 #define max 0x7fffffff
    14 
    15 struct node
    16 {
    17     int d;
    18     int l;
    19     int t;
    20     int next;
    21 
    22 }p[maxn*2];
    23 struct nn
    24 {
    25     int v;
    26     int l;
    27     int mon;
    28      friend bool operator <(nn a,nn b)
    29     {
    30         return a.l>b.l;
    31     }
    32 };
    33 priority_queue<nn>g;
    34 int num,k,n,r,vis[maxn*2],next[maxn],ans;
    35 
    36 void add(int s,int d,int l,int t)
    37 {
    38     p[num].d=d;
    39     p[num].l=l;
    40     p[num].t=t;
    41     p[num].next=next[s];
    42     next[s]=num++;
    43 
    44 
    45 }
    46 int BFS()
    47 {
    48     struct nn d,b;
    49     while(!g.empty())g.pop();
    50     d.l=0;
    51     d.mon=0;
    52     d.v=1;
    53     g.push(d);
    54     while(!g.empty())
    55     {
    56         d=g.top();g.pop();
    57 
    58         int a=d.v;
    59         if(a==n)return d.l;
    60         for(int i=next[a];i!=-1;i=p[i].next)
    61         {
    62             if(d.mon+p[i].t<=k)
    63             {
    64                 b.l=d.l+p[i].l;
    65                 b.mon=d.mon+p[i].t;
    66                 b.v=p[i].d;
    67                 g.push(b);
    68             }
    69         }
    70     }
    71     return -1;
    72 
    73 }
    74 
    75 int main()
    76 {
    77     int i,s,d,l,t;
    78     while(scanf("%d%d%d",&k,&n,&r)!=EOF)
    79     {
    80 
    81         num=0;
    82         memset(next,-1,sizeof(next));
    83         for(i=0;i<r;i++)
    84         {
    85             scanf("%d%d%d%d",&s,&d,&l,&t);
    86             add(s,d,l,t);
    87         }
    88         memset(vis,0,sizeof(vis));
    89 
    90 
    91        int ans=BFS();
    92        printf("%d\n",ans);
    93 
    94 
    95     }
    96 
    97 }
  • 相关阅读:
    文本框小写变大写控制
    SQL2005 递归查询示例,非常方便
    GridView分页后进行添加,删除操作后,仍返回到当前页码
    从ASP.NET 1.1升级到ASP.NET 2.0要考虑的Cookie问题
    英语常用口语
    ASP.NET会话(Session)保存模式
    .NET2005文档自动生成
    JavaScript 弹出窗口总结
    SQL SERVER和SYBASE的渊源
    A versatile HDR Video Production System笔记
  • 原文地址:https://www.cnblogs.com/acSzz/p/2595252.html
Copyright © 2011-2022 走看看