BZOJ1598 牛跑步 A 搜尋

2022-05-20 07:08:15 字數 2199 閱讀 9888

time limit: 10 sec  memory limit: 162 mb

[submit][status][discuss]

bessie準備用從牛棚跑到池塘的方法來鍛鍊.

但是因為她懶,她只準備沿著下坡的路跑到池塘, 然後走回牛棚.

bessie也不想跑得太遠,所以她想走最短的路經.

農場上一共有m 條路, 每條路連線兩個用1..n標號的地點.

更方便的是,如果x>y,則地點x的高度大於地點y的高度.

地點n是bessie的牛棚;地點1是池塘.

很快, bessie厭倦了一直走同一條路.所以她想走不同的路,更明確地講,她想找出k條不同的路經.為了避免過度勞累,她想使這k條路經為最短的k條路經.

請幫助bessie找出這k條最短路經的長度.

你的程式需要讀入農場的地圖,一些從x_i到y_i 的路經和它們的長度(x_i, y_i, d_i).

第1行: 3個數: n, m, 和k

第 2..m+1行: 第 i+1 行包含3個數 x_i, y_i, 和 d_i, 表示一條下坡的路.

第1..k行: 第i行包含第i最短路經的長度,或-1如果這樣的路經不存在.如果多條路經有同樣的長度,請注意將這些長度逐一列出.

5 8 7

5 4 1

5 3 1

5 2 1

5 1 1

4 3 4

3 1 1

3 2 1

2 1 112

2367

-11 <= m <= 10,000, 1 <= n <= 1000, 1 <= k <= 100

給定一張圖,輸出1~k短路的距離。

既然是求k短路,那我們使用a*搜尋,先反向建圖,記錄終點到每乙個點的最短路,然後把這個dist當做估價來跑a*即可。可以證明:第k次搜到的路即是k短路

1 #include2 #include  

3 #include4 #include5 #include6 #include7 #include8 #include9

using

namespace

std;

10 typedef long

long

s64;

1112

const

int one = 2e6+5;13

14int

n,m,k;

15int

s,t;

16int

dist[one],vis[one],output[one],tou,wei;

17int

next[one],first[one],go[one],w[one],tot;

18int

ans[one],num;

1920

struct

point

21a[one];

2425

struct

power

2632

};33

34 inline int

get()

3544

45void add(int u,int v,int

z)46

4950

void spfa(int

x)5167}

68 vis[u] = 0;69

}70}71

72void

astar()

73 );

76while(!q.empty())

77 );86}

87}88}

8990

intmain()

9199

spfa(t);

100101 memset(first,0,sizeof(first)); tot=0

;102

for(int i=1;i<=m;i++) add(a[i].x,a[i].y,a[i].z);

103104

astar();

105106

for(int i=1;i<=k;i++)

107 printf("

%d\n

",ans[i]!=0?ans[i]:-1

);108

109 }

view code

牛客 烏龜跑步

有乙隻烏龜,初始在0的位置向右跑。這只烏龜會依次接到一串指令,指令t表示向後轉,指令f表示向前移動乙個單位。烏龜不能忽視任何指令。現在我們要修改其中正好n個指令 乙個指令可以被改多次,一次修改定義為把某乙個t變成f或把某乙個f變成t 求這只烏龜在結束的時候離起點的最遠距離。假設烏龜最後的位置為x,我...

牛客網 烏龜跑步 (dfs)

有乙隻烏龜,初始在0的位置向右跑。這只烏龜會依次接到一串指令,指令t表示向後轉,指令f表示向前移動乙個單位。烏龜不能忽視任何指令。現在我們要修改其中正好n個指令 乙個指令可以被改多次,一次修改定義為把某乙個t變成f或把某乙個f變成t 求這只烏龜在結束的時候離起點的最遠距離。假設烏龜最後的位置為x,我...

USACO Mar08 牛跑步 k短路

usaco mar08 牛跑步 bessie 準備用從牛棚跑到池塘的方法來鍛鍊.但是因為她懶,她只準備沿著下坡的路跑到池塘,然後走回牛棚.bessie 也不想跑得太遠,所以她想走最短的路經.農場上一共有m 1 m 10,000 條路,每條路連線兩個用1.n 1 n 1000 標號的地點.更方便的是,...