青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 7,comments - 3,trackbacks - 0
Remmarguts' Date
Time Limit: 4000MSMemory Limit: 65536K
Total Submissions: 12450Accepted: 3422

Description

"Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. Softly touching his little ducks' head, he told them a story. 

"Prince Remmarguts lives in his kingdom UDF – United Delta of Freedom. One day their neighboring country sent them Princess Uyuw on a diplomatic mission." 

"Erenow, the princess sent Remmarguts a letter, informing him that she would come to the hall and hold commercial talks with UDF if and only if the prince go and meet her via the K-th shortest path. (in fact, Uyuw does not want to come at all)" 

Being interested in the trade development and such a lovely girl, Prince Remmarguts really became enamored. He needs you - the prime minister's help! 

DETAILS: UDF's capital consists of N stations. The hall is numbered S, while the station numbered T denotes prince' current place. M muddy directed sideways connect some of the stations. Remmarguts' path to welcome the princess might include the same station twice or more than twice, even it is the station with number S or T. Different paths with same length will be considered disparate. 

Input

The first line contains two integer numbers N and M (1 <= N <= 1000, 0 <= M <= 100000). Stations are numbered from 1 to N. Each of the following M lines contains three integer numbers A, B and T (1 <= A, B <= N, 1 <= T <= 100). It shows that there is a directed sideway from A-th station to B-th station with time T. 

The last line consists of three integer numbers S, T and K (1 <= S, T <= N, 1 <= K <= 1000).

Output

A single line consisting of a single integer number: the length (time required) to welcome Princess Uyuw using the K-th shortest path. If K-th shortest path does not exist, you should output "-1" (without quotes) instead.

Sample Input

2 2
1 2 5
2 1 4
1 2 2

Sample Output

14

Source

POJ Monthly,Zeyuan Zhu


第K短路問(wèn)題,大概意思就是給你N個(gè)點(diǎn),M條邊,邊是有向的,給你每條邊的邊權(quán),給你一個(gè)S起始點(diǎn),T結(jié)束點(diǎn),和一個(gè)K,求S到T的第K短路。
SPFA+A*啟發(fā)式搜索。

說(shuō)說(shuō)啟發(fā)式搜索吧:

通常在解決問(wèn)題的時(shí)候,我們需要用到搜索算法,由已知狀態(tài)推出新的狀態(tài),然后檢驗(yàn)新的狀態(tài)是不是就是我們要求的最優(yōu)解。檢驗(yàn)完所有的狀態(tài)實(shí)際上就相當(dāng)于遍歷了一張隱式圖。遺憾的是,所有的狀態(tài)組成的狀態(tài)空間往往是成指數(shù)級(jí)別增長(zhǎng)的,也就造成了遍歷需要用到指數(shù)級(jí)別的時(shí)間,因此,純粹的暴力搜索,時(shí)空效率都比較低。當(dāng)然,我們?cè)谏钪杏龅搅祟愃朴谒阉鞯膯?wèn)題,我們并不會(huì)盲目地去搜尋每一種狀態(tài),我們會(huì)通過(guò)我們的思維,選擇一條最接近于目標(biāo)的路徑或者是近似于最短的路徑去完成搜索任務(wù)。當(dāng)我們想要計(jì)算機(jī)去完成這樣一項(xiàng)搜索任務(wù)的時(shí)候,就得讓計(jì)算機(jī)像人一樣能夠區(qū)分盡量短的路徑,以便高效地找到最優(yōu)解。這時(shí)可以把計(jì)算機(jī)看作是一種智能體(agent)可以實(shí)現(xiàn)由初始狀態(tài)向目標(biāo)狀態(tài)的轉(zhuǎn)移。

       有一種貪心策略,即每一步轉(zhuǎn)移都由計(jì)算機(jī)選擇當(dāng)前的最優(yōu)解生成新的狀態(tài),一直到達(dá)目標(biāo)狀態(tài)為止。這樣做的時(shí)間效率雖然較高,但是貪心的策略只是用到了局部的最優(yōu)解,并不能保證最后到達(dá)目標(biāo)狀態(tài)得到的是全局最優(yōu)解。在能保證全局最優(yōu)解的范圍內(nèi),貪心算法還是很有用的。比如說(shuō)我們熟知的Dijkstra算法求單源最短路。每次選擇距離源節(jié)點(diǎn)最短距離的待擴(kuò)展節(jié)點(diǎn)進(jìn)行擴(kuò)展,最后就能生成源節(jié)點(diǎn)到所有節(jié)點(diǎn)的最短路徑。下面會(huì)講到Dijkstra的擴(kuò)展,當(dāng)理解了這個(gè)算法之后,我想,你會(huì)對(duì)Dijkstra有更深入的理解。

       這就是A*算法。定義初始狀態(tài)S,目標(biāo)狀態(tài)tg(s)是由初始狀態(tài)轉(zhuǎn)移到當(dāng)前狀態(tài)s所經(jīng)過(guò)的路徑長(zhǎng)度,h*(s)是當(dāng)前狀態(tài)s距離目標(biāo)狀態(tài)t的實(shí)際長(zhǎng)度,但是一般情況下我們是不知道h*(s)的值的,所以還要定義一個(gè)估價(jià)函數(shù)h(s),是對(duì)h*(s)函數(shù)值的下界的估計(jì),也就是有h(s)<=h*(s),這樣需要一個(gè)條件,使得由s1生成的每狀態(tài)s2,都有h(s1)<=h(s2),這是一個(gè)相容的估價(jià)函數(shù)。再定義f(s)=g(s)+h(s)為啟發(fā)函數(shù),因?yàn)?/span>h(s)是單調(diào)遞增的,所以f(s)也是單調(diào)遞增的。這樣f(s)就估計(jì)出了由初始狀態(tài)的總體代價(jià)。A*算法就通過(guò)構(gòu)造這樣一個(gè)啟發(fā)函數(shù),將所有的待擴(kuò)展?fàn)顟B(tài)加入到隊(duì)列里,每次從隊(duì)列里選擇f(s)值最小的狀態(tài)進(jìn)行擴(kuò)展。由于啟發(fā)函數(shù)的作用,使得計(jì)算機(jī)在進(jìn)行狀態(tài)轉(zhuǎn)移的時(shí)候盡量避開了不可能產(chǎn)生最優(yōu)解的分支,而選擇相對(duì)較接近最優(yōu)解的路徑進(jìn)行搜索,提高了搜索效率。

       講到這里,可能已經(jīng)對(duì)A*算法的概念有點(diǎn)眉目了。下面我再來(lái)做一個(gè)比較,就用上面講到的Dijkstra的例子。Dijkstra算法說(shuō)的是每次選擇距離源點(diǎn)最短距離的點(diǎn)進(jìn)行擴(kuò)展。當(dāng)然可以看做事先將源點(diǎn)到所有節(jié)點(diǎn)距離的值保存在一個(gè)優(yōu)先隊(duì)列里,每次從優(yōu)先隊(duì)列里出隊(duì)最短距離的點(diǎn)擴(kuò)展,每個(gè)點(diǎn)的擴(kuò)展涉及到要更新隊(duì)列里所有待擴(kuò)展節(jié)點(diǎn)的距離值,每個(gè)節(jié)點(diǎn)只能進(jìn)隊(duì)一次,就需要有一個(gè)表來(lái)記錄每個(gè)節(jié)點(diǎn)的入隊(duì)次數(shù)(就是算法中用到的標(biāo)記數(shù)組)。將Dijkstra求最短路的方法擴(kuò)展,這道題目要求的是兩點(diǎn)間第k短路。類比于Dijkstra算法可以首先確定下面幾個(gè)搜索策略:

1、用優(yōu)先隊(duì)列保存節(jié)點(diǎn)進(jìn)行搜索。

2、放開每個(gè)節(jié)點(diǎn)的入隊(duì)次數(shù),求k短路,每個(gè)節(jié)點(diǎn)可以入隊(duì)k次。

首先看第一個(gè)策略,在A*算法中用優(yōu)先隊(duì)列就是要用到啟發(fā)函數(shù)f(s)確定狀態(tài)在優(yōu)先隊(duì)列里面的優(yōu)先級(jí)。其實(shí)Dijkstra用到的優(yōu)先隊(duì)列實(shí)際上就是估價(jià)函數(shù)值為0,啟發(fā)函數(shù)f(s)=g(s),即是選取到源點(diǎn)距離最近的點(diǎn)進(jìn)行擴(kuò)展。因?yàn)?/span>h(s)=0滿足了估價(jià)函數(shù)相容這個(gè)條件。這題求k短路就不能單純的使用h(s)=0這個(gè)估價(jià)函數(shù)。解決這道題的時(shí)候選取h(x)=dt(x), dt(x)x節(jié)點(diǎn)到目標(biāo)節(jié)點(diǎn)的最短距離。最短距離可以開始由Dijkstra直接求得。

再看第二個(gè)策略,控制每個(gè)節(jié)點(diǎn)的入隊(duì)(或出隊(duì))次數(shù)為k次,可以找到第k短路徑。可能這樣想有點(diǎn)主觀的套用,那么我就先來(lái)證明這樣一個(gè)結(jié)論:

如果xst的第k短路徑上的一個(gè)節(jié)點(diǎn),那么由這條路徑sxsx的第m短路徑,則不可能有m>k。用反證法很容易得出:如果這條路徑是sx的第m短路徑,如果m>k,那么經(jīng)過(guò)xt的路徑就有m-1條比當(dāng)前路徑要短,不符合當(dāng)前路徑是st的第k短路徑。

代碼:

#include <cstdio>
#include 
<algorithm>
#include 
<queue>
#include 
<vector>
#include 
<cstring>
#define MAXN 10005 //邊數(shù)
#define inf 1 << 25
using namespace std;

int dis[MAXN];

struct node
{
    
int v, dis;
};

struct edge
{
    
int v, w;
    friend 
bool operator < (edge a, edge b)
    {
        
return (a.w + dis[a.v]) > (b.w + dis[b.v]);
    }
};

vector 
<node> map[MAXN];
vector 
<node> remap[MAXN];

int n, m; //n是節(jié)點(diǎn)數(shù),m是邊數(shù)。
int s, t, k;  //s是起始點(diǎn),t是結(jié)束點(diǎn),k是第k小。

void init()
{
    
int i;
    
for (i = 0; i < MAXN; ++i)
        map[i].clear();
    
for (i = 0; i < MAXN; ++i)
        remap[i].clear();
}

void spfa(int s)
{
    
int i;
    
bool used[MAXN];
    memset(used, 
0sizeof(used));
    
for (i = 0; i < MAXN; ++i)
        dis[i] 
= inf;
    dis[s] 
= 0;
    used[s] 
= true;
    queue 
<int> q;
    q.push(s);
    
while (!q.empty())
    {
        
int u = q.front();
        q.pop();
        used[u] 
= false;
        
for (i = 0; i < remap[u].size(); ++i)
        {
            node p 
= remap[u][i];
            
if (dis[p.v] > dis[u] + p.dis)
            {
                dis[p.v] 
= dis[u] + p.dis;
                
if (!used[p.v])
                {
                    used[p.v] 
= true;
                    q.push(p.v);
                }
            }
        }
    }
}

int a_star()
{
    
if (s == t)
        k
++;   //注意,起始和結(jié)束一樣,k要+1;
    if (dis[s] == inf)
        
return -1;
    
int i, x, len, cnt[MAXN];
    edge n1, n2;
    priority_queue 
<edge> q;
    memset(cnt, 
0sizeof(cnt));
    n1.v 
= s;
    n1.w 
= 0;
    q.push(n1);
    
while (!q.empty())
    {
        n2 
= q.top();
        q.pop();
        x 
= n2.v;
        len 
= n2.w;
        cnt[x]
++;
        
if (cnt[t] == k)
            
return len;
        
if (cnt[x] > k)
            
continue;
        
for (i = 0; i < map[n2.v].size(); ++i)
        {
            n1.v 
= map[n2.v][i].v;
            n1.w 
= len + map[n2.v][i].dis;
            q.push(n1);
        }
    }
    
return -1;
}

int main()
{
    
int i;
    node p;
    
while (scanf("%d%d"&n, &m) != EOF)
    {
        init();
        
int a, b, l;
        
for (i = 1; i <= m; ++i)
        {
            scanf(
"%d%d%d"&a, &b, &l);
            p.v 
= b;
            p.dis 
= l;
            map[a].push_back(p);
            p.v 
= a;
            remap[b].push_back(p);
        }
        scanf(
"%d%d%d"&s, &t, &k);
        spfa(t);
        
int ans = a_star();
        printf(
"%d\n", ans);
    }
    
return 0;
}
posted on 2011-10-17 15:19 LLawliet 閱讀(697) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 圖論

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲在线免费视频| 亚洲欧美日韩久久精品| 亚洲综合三区| 久久亚洲私人国产精品va| 亚洲福利专区| 亚洲精品五月天| 欧美一级在线视频| 欧美大胆a视频| 国产欧美婷婷中文| 亚洲美女性视频| 久久激情视频免费观看| 亚洲激情在线播放| 欧美影院在线| 欧美日韩综合不卡| 亚洲第一在线视频| 性高湖久久久久久久久| 欧美激情一区二区三区四区| 亚洲欧美乱综合| 欧美成人激情视频| 国一区二区在线观看| 亚洲午夜在线视频| 亚洲大胆在线| 久久国产精品99久久久久久老狼| 欧美日韩国产精品一区二区亚洲 | 国产精品一区免费观看| 亚洲日本乱码在线观看| 久久精品人人做人人爽电影蜜月| 亚洲卡通欧美制服中文| 久久亚洲私人国产精品va| 国产伦一区二区三区色一情| 一本一道久久综合狠狠老精东影业 | 中文欧美字幕免费| 欧美国产欧美亚洲国产日韩mv天天看完整 | 一本色道88久久加勒比精品 | 亚洲激情黄色| 久久一区二区三区av| 国产日韩精品在线观看| 亚洲一区三区电影在线观看| 亚洲国产一二三| 久久亚洲一区二区| 国内精品免费在线观看| 性欧美激情精品| 一本色道久久综合| 欧美久久一级| 亚洲精品在线免费| 欧美xart系列高清| 久久国产成人| 国产一区视频在线看| 一区二区三区视频在线| 母乳一区在线观看| 伊人夜夜躁av伊人久久| 性久久久久久| 亚洲新中文字幕| 欧美日韩精品一区二区在线播放| 亚洲国产精品电影在线观看| 久久人人97超碰国产公开结果| 亚洲素人在线| 国产精品jizz在线观看美国 | 欧美激情一区二区三区| 久久精品日韩| 狠狠色丁香婷婷综合| 欧美综合国产| 欧美一级艳片视频免费观看| 国产精品一二| 欧美一级成年大片在线观看| 亚洲桃色在线一区| 国产精品入口66mio| 亚洲欧美成人综合| 亚洲午夜视频在线| 国产精品一区二区三区成人| 欧美亚洲视频一区二区| 亚洲女人天堂av| 国产亚洲精品久久飘花| 久久久久天天天天| 久久精品一区二区| 亚洲福利在线看| 欧美激情影院| 欧美日韩二区三区| 亚洲在线一区| 性欧美video另类hd性玩具| 国内免费精品永久在线视频| 米奇777超碰欧美日韩亚洲| 免费不卡中文字幕视频| 日韩一级免费观看| 国产精品99久久久久久久女警| 国产精品视频不卡| 久久久国产成人精品| 久久久久久久性| 亚洲精品人人| 日韩网站在线观看| 国产精品外国| 久久久精品国产免费观看同学| 久久久亚洲成人| 日韩视频免费大全中文字幕| 在线天堂一区av电影| 国产亚洲一区二区精品| 欧美高清视频在线播放| 欧美日韩亚洲网| 久久av资源网| 欧美成年人网站| 亚洲综合激情| 久久久国产一区二区三区| 亚洲精品国产精品久久清纯直播| 亚洲美女视频在线免费观看| 国产免费亚洲高清| 欧美激情二区三区| 国产精品久久精品日日| 另类尿喷潮videofree| 欧美日韩成人激情| 韩日成人在线| 免费在线观看一区二区| 欧美精品福利在线| 亚洲欧美制服中文字幕| 久久riav二区三区| 夜夜夜精品看看| 欧美一级欧美一级在线播放| 亚洲国产婷婷| 亚洲午夜在线视频| 亚洲国产成人高清精品| av成人天堂| 在线精品视频免费观看| av成人福利| 在线免费观看欧美| 亚洲视频在线看| 亚洲黄色一区| 香蕉久久夜色精品| 99视频精品| 久久精品99国产精品日本| 妖精视频成人观看www| 欧美中文在线观看| 这里只有精品丝袜| 久久中文精品| 久久xxxx| 国产精品v日韩精品v欧美精品网站| 浪潮色综合久久天堂| 国产精品乱码一区二区三区| 亚洲福利视频三区| 狠狠色狠狠色综合日日五| 一本色道久久综合亚洲精品不卡| 在线观看国产一区二区| 亚洲欧美日韩一区二区三区在线| 99re热精品| 另类av一区二区| 久久久久国产精品午夜一区| 欧美系列精品| 最新国产成人在线观看| 尤物精品国产第一福利三区 | 午夜精品久久一牛影视| 欧美高清在线一区二区| 久久亚洲欧洲| 国产视频在线观看一区| 亚洲色图在线视频| 99av国产精品欲麻豆| 久久在线播放| 久热国产精品| 国产日韩欧美综合在线| 亚洲性夜色噜噜噜7777| 一区二区三区四区五区精品| 欧美91视频| 欧美国产欧美亚洲国产日韩mv天天看完整 | 一本色道久久综合狠狠躁篇的优点| 91久久综合亚洲鲁鲁五月天| 久久久久久**毛片大全| 久久久久久久一区二区| 国产日韩av一区二区| 亚洲欧美国产77777| 午夜精品理论片| 国产精品久久久久永久免费观看 | 国产欧美1区2区3区| 中文精品视频| 亚洲资源av| 国产精品丝袜白浆摸在线| 亚洲深夜av| 小黄鸭精品密入口导航| 国产精品女主播| 亚洲免费在线观看视频| 欧美一区二区精品在线| 国产欧美 在线欧美| 欧美一区二区精品在线| 久久精品夜色噜噜亚洲a∨| 国产一区二区三区四区hd| 久久精品国产成人| 狂野欧美激情性xxxx欧美| 在线日韩中文| 欧美成人免费va影院高清| 亚洲国产一区二区在线| 一区二区三区国产在线观看| 欧美日韩在线另类| 国产精品99久久久久久宅男| 小处雏高清一区二区三区| 国产婷婷色一区二区三区在线| 久久av一区| 欧美大片在线影院| 99精品久久免费看蜜臀剧情介绍| 欧美日韩综合视频| 亚洲欧美视频| 美女91精品| 99国产麻豆精品| 国产精品一区二区久久久久| 欧美一区国产一区|