PKU 3159 Candies

#include  < iostream >
#include 
< vector >
#include 
< queue >
#define  MAXN 30001
using   namespace  std;

struct  type1
{
    
int  v, w;
    
bool   operator   <  ( const  type1 &  e)  const  {
        
return  w  >  e.w;
    }
};

int  D[MAXN];

int  dijk(vector < vector < type1 >   >&  map,  int  s,  int  t)
{
    priority_queue
< type1 >  q;
    
bool  mk[MAXN]  =  { false };
    type1 e 
=  {s,  0 }, ne;
    
int  i, k, tmp;
    
    D[s] 
=   0
    q.push(e);
    
while  ( ! q.empty())
    {
        e 
=  q.top();
        q.pop();
        
if  (mk[e.v])  continue ;
        
if  (e.v  ==  t)  return  D[t];
        
for  (mk[e.v]  =   true , i  =   0 ; i  <  map[e.v].size(); i ++ )
        {
            k 
=  map[e.v][i].v;
            
if  ( ! mk[k]  &&  (tmp  =  e.w  +  map[e.v][i].w)  <  D[k])
            {
                D[ne.v 
=  k]  =  ne.w  =  tmp;
                q.push(ne);
            }
        }
    }
    
return  D[t];
}

int  main()
{
    
int  n, m;
    
int  a, b, c;
    type1 t;
    
    scanf(
" %d %d " & n,  & m);
    vector
< vector < type1 >   >  map(n);
    
for  ( int  i  =   0 ; i  <  n; i ++ )
        D[i] 
=  INT_MAX;
    
while  (m -- )
    {
        scanf(
" %d %d %d " & a,  & b,  & c);
        t.v 
=  b  -   1 ;
        t.w 
=  c;
        map[a
- 1 ].push_back(t);
    }
    printf(
" %d\n " , dijk(map,  0 , n - 1 ));
    
return   0 ;
}

你可能感兴趣的:(pku)