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

     1  1 
     2 http://poj.org/problem?id=1724
     3 一开始就直接写了一个DFS,直接TLE,以为用dfs肯定会超,后来看到discuss里有人
     4  2 有人用了DFS,所以看了 看,发现进行一些优化,后就可以AC
     5  3 优化看代码
     6  4      
     7  5 #include<stdio.h>
     8  6 #include<string.h>
     9  7 #define maxn 20000
    10  8 #define max 0x7fffffff
    11  9 
    12 10 struct node
    13 11 {
    14 12     int d;
    15 13     int l;
    16 14     int t;
    17 15     int next;
    18 16 }p[maxn*2];
    19 17 int num,k,n,r,vis[maxn*2],next[maxn],ans;
    20 18 
    21 19 void add(int s,int d,int l,int t)
    22 20 {
    23 21     p[num].d=d;
    24 22     p[num].l=l;
    25 23     p[num].t=t;
    26 24     p[num].next=next[s];
    27 25     next[s]=num++;
    28 26 
    29 27 
    30 28 }
    31 29 void  DFS(int x,int d,int sum)
    32 30 {
    33 31 
    34 32     if(sum>k)return ;
    35 33     if(x==n)
    36 34     {
    37 35 
    38 36         if(ans>d)ans=d;
    39 37         return ;
    40 38     }
    41 39     for(int i=next[x];i!=-1;i=p[i].next)
    42 40     {
    43 41         int v=p[i].d;
    44 42         if(!vis[v]&&d+p[i].l<ans&&sum+p[i].t<=k)//在这优化判断条件加了d+p[i].l<ans&&sum+p[i].t<=k
    45 43         {                                       //没有将他们提到上面,提到上面就TLE
    46 44             vis[v]=1;
    47 45             DFS(v,d+p[i].l,sum+p[i].t);
    48 46             vis[v]=0;
    49 47 
    50 48         }
    51 49     }
    52 50 }
    53 51 
    54 52 int main()
    55 53 {
    56 54     int i,s,d,l,t;
    57 55     while(scanf("%d%d%d",&k,&n,&r)!=EOF)
    58 56     {
    59 57 
    60 58         num=0;
    61 59         memset(next,-1,sizeof(next));
    62 60         for(i=0;i<r;i++)
    63 61         {
    64 62             scanf("%d%d%d%d",&s,&d,&l,&t);
    65 63             add(s,d,l,t);
    66 64         }
    67 65         memset(vis,0,sizeof(vis));
    68 66         ans=max;
    69 67 
    70 68         DFS(1,0,0);
    71 69         if(ans!=max)printf("%d\n",ans);
    72 70         else printf("-1\n");
    73 71 
    74 72     }
    75 73 
    76 74 }
  • 相关阅读:
    线性回归学习历程
    CART决策树的学习历程
    markdown测试
    开张大吉+代码测试
    使用tomcat启动dubbo项目
    ThreadLocal 工作原理、部分源码分析
    Dubbo项目demo搭建
    redis 操作 list 的测试
    redis 操作 hash 的测试
    redis 操作string 的测试
  • 原文地址:https://www.cnblogs.com/acSzz/p/2595266.html
Copyright © 2011-2022 走看看