[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)
1spfa+a*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()
1 #include 2 #include 3 #include 4 #include 5 #include 6dijs+a*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()
牛客 烏龜跑步
有乙隻烏龜,初始在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 條路,每條...