點此看題
可以把原來的陣列表示成差分陣列,那麼只有a+1
,a+b
+1.....
a+1,a+b+1.....
a+1,a+
b+1.
....
這四個位置有值,我們要把所有值給消去。
把操作理解為建邊,那麼找出兩個關鍵點的最短路就是消去這兩個關鍵點,那麼我們消去兩對關鍵點就可以了,有乙個特殊情況就是乙個點和n+1
n+1n+
1相連,那麼必然會剩下乙個點,它只能通過這種方法消去,所以這種情況還是可以歸類到上面去的。
具體就是跑3
33邊dij
kdijk
dijk
,還有疑問可以康**。
#include
#include
#include
using
namespace std;
#define int long long
#define inf 0x3f3f3f3f3f3f3f3f
const
int m =
500005
;int
read()
int n,m,tot,ans,a[6]
,f[m]
,dis[m][3
];struct edge
e[m]
;struct node
};priority_queue q;
void
dijk
(int x,
int p));
while
(!q.
empty()
));}
}}}signed
main()
,f[v]
=tot;
e[++tot]
=edge
,f[u]
=tot;
}dijk
(a[1]+
1,0)
;dijk
(a[2]+
1,1)
;dijk
(a[3]+
1,2)
; ans=inf;
ans=
min(ans,dis[a[2]
+1][
0]+dis[a[4]
+1][
2]);
ans=
min(ans,dis[a[3]
+1][
0]+dis[a[4]
+1][
1]);
ans=
min(ans,dis[a[4]
+1][
0]+dis[a[3]
+1][
1]);
if(ans==inf)
puts
("-1");
else
printf
("%lld\n"
,ans)
;}
JOISC 2020 Day1 建築裝飾 4
loj 考慮設 f 表示到了第 i 個位置,用了 j 個a,k 個b的可行性,打表發現對於 i,j 的 k 是連續的,所以考慮記錄 l 表示前 i 個位置用了 j 個a最少用多少個b,r 同理.最後輸出方案的時候一步一步的倒推即可.include include include include in...
JOISC 2014 Day1 有趣的家庭菜園
joisc 2014 day1 有趣的家庭菜園 前置技能 樹狀陣列。如果我們知道了目標序列,我們就可以構造乙個序列p,它的每乙個元素就是目標序列這一位置的元素在原序列的位置,那麼答案就是原位置序列 也就是 通過氣泡排序達到目標序列所需的交換次數目。而氣泡排序的交換次數就是p的逆序對的數量。由於要滿足...
NOIP2015 Day1 資訊傳遞
題目描述 有 n 個同學 編號為 1 到 n 正在玩乙個資訊傳遞的遊戲。在遊戲裡每人都有乙個固定的資訊傳遞物件,其中,編號為 i 的同學的資訊傳遞物件是編號為 t i 的同學。遊戲開始時,每人都只知道自己的生日。之後每一輪中,所有人會同時將自己當前所知的生日資訊告訴各自的資訊傳遞物件 注意 可能有人...