• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            #include <cstdio>
            #include 
            <vector>
            #include 
            <queue>
            #include 
            <functional>

            using namespace std;

            #define MAXN  1010
            typedef pair
            <int,int> PAIR;

            int n, m, s, t, k;
            vector
            < PAIR > map[MAXN], graph[MAXN];
            int h[MAXN];

            struct Node
            {
                
            int v, cost;
                Node() {}
                Node( 
            int a, int b ):v(a), cost(b) {}
            };

            bool operator< ( Node a, Node b )
            {
                
            return a.cost+ h[a.v]> b.cost+ h[b.v];
            }

            void dijk()
            {
                fill( h, h
            + n+ 1, INT_MAX );
                priority_queue
            < PAIR > q;
                
                q.push( make_pair( t, 
            0 ) );
                h[t]
            = 0;
                
                
            while!q.empty() )
                {
                    
            int u= q.top().first, len= q.top().second; q.pop();
                    
                    
            if( h[u]!= len ) continue;
                    
                    
            for( size_t i= 0; i< graph[u].size(); ++i )
                    {
                        
            int v= graph[u][i].first, cost= graph[u][i].second;
                        
                        
            if( h[v]> len+ cost )
                        {
                            q.push( make_pair( v, len
            + cost ) );
                            h[v]
            = len+ cost;
                        }
                    }
                }
            }

            int A_star()
            {
                priority_queue
            < Node > q;
                
            int c[MAXN];
                
                fill( c, c
            + n+ 10 );
                
            if( h[s]== INT_MAX ) return -1;
                
                q.push( Node( s, 
            0 ) );                                                                                                                                                                                                                                                                                                                                                              
                
            while!q.empty() )
                {
                    
            int v= q.top().v, cost= q.top().cost; q.pop();
                    
                    c[v]
            ++;
                    
            if( c[t]== k ) return cost;
                    
            if( c[v]> k  ) continue;
                    
                    
            for( size_t i= 0; i< map[v].size(); ++i )
                        q.push( Node( map[v][i].first, cost
            + map[v][i].second ) );
                }
                
                
            return -1;
            }

            int main()
            {
                scanf(
            "%d%d",&n,&m );
                
                
            forint i= 0; i< m; ++i )
                {
                    
            int u, v, d;
                    scanf(
            "%d%d%d",&u,&v,&d );
                    
                    map[u].push_back ( make_pair( v, d ) );
                    graph[v].push_back ( make_pair( u, d ) );
                }
                
                scanf(
            "%d%d%d",&s,&t,&k );
                
            if( s== t ) k++;
                
                dijk();
                printf(
            "%d\n",A_star() );
                
                
            return 0;
            }



            #include <iostream>
            #include 
            <vector>
            #include 
            <queue>
            #include 
            <algorithm>
            #include 
            <functional>
            #include 
            <cstdio>
            #include 
            <cstdlib>
            #include 
            <cstring>

            using namespace std;

            #define N 1002
            #define inf 1<<30

            typedef pair
            <int,int> PAIR;

            int n, m, S, T, K;
            vector
            <PAIR> g1[N], g2[N];
            int h[N], cnt[N];

            void dijk(){
                priority_queue
            <PAIR,vector<PAIR>,greater<PAIR> > q;
                
            forint i= 0; i<= n; ++i ) h[i]= inf;
                h[T]
            = 0;  q.push( PAIR(0,T) );
                
                
            while!q.empty() ){
                    
            int u= q.top().second, w= q.top().first; q.pop();
                    
                    
            if( w!= h[u] ) continue;
                    
                    
            for( size_t i= 0; i< g2[u].size(); ++i ){
                        
            int v= g2[u][i].first, d= g2[u][i].second;
                        
            if( h[u]+ d< h[v] ){
                            h[v]
            = h[u]+ d;
                            q.push( PAIR( h[v], v ) );
                        }
                    }
                }
            }

            struct cmp{
                inline 
            bool operator()( PAIR const& a, PAIR const& b ){
                    
            return a.second+ h[a.first]> b.second+ h[b.first];
                }
            };

            int A_star(){
                
            if( h[S]== inf ) return -1;
                
                priority_queue
            <PAIR,vector<PAIR>,cmp> q;
                q.push( PAIR( S, 
            0 ) );
                
                
            while!q.empty() ){
                    
            int u= q.top().first, w= q.top().second; q.pop();
                    
                    cnt[u]
            ++;
                    
            if( cnt[T]== K ) return w;
                    
            if( cnt[u]> K ) continue;
                    
                    
            for( size_t i= 0; i< g1[u].size(); ++i )
                    q.push( PAIR( g1[u][i].first, g1[u][i].second
            + w ) );
                }
                
                
            return -1;
            }

            inline 
            int read(){
                
            char ch;
                
            int d;
                
            while( ch= getchar(), ch< '0' || ch> '9' );
                d
            = ch- '0';
                
            while( ch= getchar(), ch>= '0' && ch<= '9' )
                d
            = d* 10+ ch- '0';
                
            return d;
            }

            int main(){
                scanf(
            "%d%d",&n,&m );
                
                
            int u, v, d;
                
            while( m-- ){
                    u
            = read(); v= read(); d= read();
                    
                    g1[u].push_back( PAIR(v,d) );
                    g2[v].push_back( PAIR(u,d) );
                }
                scanf(
            "%d%d%d",&S,&T,&K );
                
            if( S== T ) K++;
                
                dijk();
                printf(
            "%d\n", A_star() );
                
                
            return 0;
            }
            posted on 2008-12-04 14:00 Darren 閱讀(866) 評論(2)  編輯 收藏 引用

            評論:
            # re: Pku 2449 Remmarguts' Date 2009-08-03 23:19 | Linz
            太奇怪了,我用優先隊列怎么樣都MLE,手寫堆才過的。  回復  更多評論
              
            # re: Pku 2449 Remmarguts' Date[未登錄] 2009-08-24 22:47 | super
            為什么你的dijkstra那樣也可以的???  回復  更多評論
              
            青青草国产97免久久费观看| 午夜精品久久久久久久| 一本大道加勒比久久综合| 欧美伊香蕉久久综合类网站| 久久久精品国产Sm最大网站| 久久天天躁狠狠躁夜夜2020一| 久久青青色综合| 久久发布国产伦子伦精品| 蜜桃麻豆www久久| 亚洲欧美久久久久9999| 久久激情亚洲精品无码?V| 久久亚洲AV无码精品色午夜| 99精品国产在热久久无毒不卡 | 久久91精品国产91久久小草| 久久国产免费| 国产精品久久久久久| 亚洲成av人片不卡无码久久| 国内精品人妻无码久久久影院| 久久国产免费直播| 久久综合九色综合久99| 无码人妻久久一区二区三区蜜桃| 久久久久久免费一区二区三区| 久久久久久亚洲精品影院| 久久播电影网| 九九久久精品无码专区| 国产精品福利一区二区久久| 亚洲色大成网站WWW久久九九| 久久久久亚洲精品天堂久久久久久| 国产精品久久久久9999高清| 日本欧美久久久久免费播放网 | 国产色综合久久无码有码| 久久精品夜色噜噜亚洲A∨| 亚洲精品高清国产一久久| 久久福利青草精品资源站| 国产精品久久成人影院| 国产69精品久久久久777| 久久精品国产亚洲av日韩| 久久久久久精品免费免费自慰| 97精品伊人久久大香线蕉| 亚洲精品国产字幕久久不卡 | 亚洲国产精品无码久久久不卡|