USACO Mar08 牛跑步 k短路

2021-08-09 08:47:12 字數 3349 閱讀 7725

[usaco mar08] 牛跑步

bessie

準備用從牛棚跑到池塘的方法來鍛鍊. 但是因為她懶,她只準備沿著下坡的路跑到池塘,然後走回牛棚.

bessie

也不想跑得太遠,所以她想走最短的路經. 農場上一共有m(1<=m<=10,000)

條路,每條路連線兩個用1..n(1<=n<=1000)

標號的地點. 更方便的是,如果x>y

,則地點x

的高度大於地點y

的高度. 地點n

是bessie

的牛棚;地點1

是池塘.

很快, bessie

厭倦了一直走同一條路.所以她想走不同的路,更明確地講,她想找出k(1<=k<=100)

條不同的路經.為了避免過度勞累,她想使這k

條路徑為最短的k

條路徑.

請幫助bessie

找出這k

條最短路經的長度.你的程式需要讀入農場的地圖, 一些從xi

到yi的路徑和它們的長度(xi,yi,di)

. 所有(xi,yi,di)

滿足(1<=yi

題目名稱: cowjog

輸入格式:

樣例輸入 (cowjog.in):

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 1輸出格式:

樣例輸出 (cowjog.out):

122

367-1

輸出解釋:

路徑分別為(5−1),(5−3−1),(5−2−1),(5−3−2−1),(5−4−3−1),(5−4−3−2−1)

1

23 #include 4 #include 5 #include 6 #include 7 #include 8

9using

namespace

std;

1011

const

int maxm=10010;12

const

int maxn=1010;13

14int

n,m,k;

1516

intdis[maxn];

1718

bool

vis[maxn];

1920

struct

skt

26};

27skt s;

2829

struct

edge

34 edge(int to,int val,int

next):to(to),val(val),next(next){}

35};

36 edge e[maxm<<1],r[maxm<<1

];37

38int

head[maxn],head[maxn],tot;

3940 inline void add(int x,int y,int

v) 45

46 inline void read(int&x)

5253

void

spfa() 69}

70}71return;72

}7374void

astar()

86if(ans==k) return;87

for(int i=head[now.v];i!=-1;i=e[i].next) 94}

95}96while(ans"

-1\n

"),++ans;

97return;98

}99100int

hh()

110spfa();

111astar();

112return0;

113}

114115

int sb=hh();

116int main()

spfa+a*

1 #include 2 #include 3 #include 4 #include 5 #include 6

7using

namespace

std;89

const

int maxm=10010;10

const

int maxn=1010;11

12int

n,m,k;

1314

intdis[maxn];

1516

bool

vis[maxn];

1718

struct

skt

22 skt(int v,int

dist):v(v),dist(dist) {}

23 skt(int x,int y,int

z) 27

bool

operator

< (const skt&p) const

30};

31skt s;

3233

struct

edge

38 edge(int to,int val,int

next):to(to),val(val),next(next){}

39};

40 edge e[maxm<<1],r[maxm<<1

];41

42int

head[maxn],head[maxn],tot;

4344 inline void add(int x,int y,int

v) 49

50 inline void read(int&x)

5657

void

dijs() 71}

72}73return;74

}7576void

astar()

85if(ans==k) return;86

for(int i=head[now.v];i!=-1;i=e[i].next)

87 q.push(skt(e[i].to,now.val+e[i].val,dis[e[i].to]));88}

89while(ans"

-1\n

"),++ans;

90return;91

}9293int

hh()

103dijs();

104astar();

105return0;

106}

107108

int sb=hh();

109int main()

dijs+a*

牛客 烏龜跑步

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

牛客網 烏龜跑步 (dfs)

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

BZOJ1598 牛跑步 A 搜尋

time limit 10 sec memory limit 162 mb submit status discuss bessie準備用從牛棚跑到池塘的方法來鍛鍊.但是因為她懶,她只準備沿著下坡的路跑到池塘,然後走回牛棚.bessie也不想跑得太遠,所以她想走最短的路經.農場上一共有m 條路,每條...