货物运输
时间限制:1秒 内存限制:256M
【题目描述】
运送货物需要交纳过路费:进入一个村庄需要交纳 1 个单位的货物,而进入一个城镇的时候,每 20 个单位的货物中就要交纳 1 个单位(比如,携带 70 个单位的货物进入城镇,需要交纳 4 个单位)。如下图,由于你必须经过一个城镇和两个村庄才能到达目的地(方框代表城镇,圆代表村庄),为了运送 66 把勺子,你必须携带 76 把勺子出发。
当起点与终点固定时,到达目的地的路线往往不唯一。如下图,运送 39 把勺子的最佳路线是 \(A->b->c->X\),而运送 10 把勺子的最佳路线是 \(A->D->X\)。
你的任务是找一条交纳过路费最少的路线。
【输入格式】
第 1 行为整数:\(n,m\),表示地图上点(城镇或村庄)的数目和道路条数,城镇或村庄编号为 \(1..n\)。
第 2 行为 \(n\) 个 0 或 1 的数,第 \(i\) 个整数为 0,表示地图 \(i\) 号点为村庄,1 表示城镇。
接下来的 \(m\) 行,每行包含两个整数:\(a,b\),表示 \(a\) 号点与 \(b\) 号点有一条道路。
最后一行包含 3 个整数 \(p,s,t\),表示运送货物的数量、起点和终点。输入保证货物能从起点运送到终点。
【输出格式】
输出2行:需要的货物数量的最小值,以及对应路线。如果有多条路线,输出字典序最小的。
【输入输出样例1】
Input
2 1
1 2
0 1
19 1 2
Output
20
1-2
【输入输出样例2】
Input
5 5
1 1 1 0 0
1 2
2 3
1 4
4 5
5 3
39 1 3
Output
44
1-4-5-3
【数据限制】
\(100\%\) 的数据满足,\(1 ≤ n ≤ 20000\) , \(1 ≤ m ≤ 50,000\) ,\(1 ≤ p ≤ 10^9\)。
【来源】
Mr.he