最新消息:380元/半年,推荐全网最具性价比的一站式编程学习平台码丁实验室

信息学奥赛题库- 地壳运动

C++ 少儿编程 1049浏览 0评论

友情提示:380元/半年,儿童学编程,就上码丁实验室

【题目描述】

城市中建立了$N$个应急避难所以躲避灾害,这些避难所从$1~N$编号。此外有$M$条道路连接这些避难所,所有避难所间均可通过这$M$条道路直接或间接到达。路可以由若干个平行于$x$或$y$坐标轴的线段组成,所以避难所$x_i$和$y_i$之间的道路可以用$(u_i,v_i)$来表示,道路的长度为$u_i+v_i$。

由于地壳运动会导致地面拉伸或收缩,可用两个实数$k_1,k_2$描述城市的伸缩程度,此时某条道路的实际长度变为$u_i × k_1+v_i × k_2$。

有若干个独立的询问,每次询问给出$k_1$和$k_2$,政府都希望在此地壳运动前提下,以最小的花费维护其中一些道路,使得只用这些被维护的道路仍能使所有避难所间相互连通。因为花费与道路的实际总长成正比,所以你需要对每一次询问求出被维护道路的最短实际总长度。

【输入】

第一行三个整数$N,M,Q$,分别表示避难所数量、道路数量、询问数量。

接下来$M$行每行四个整数$x_i,y_i,u_i,v_i。x_i,y_i$表示道路连接的两个避难所编号,$u_i,v_i$意义如上文所述。

最后$Q$行每行两个实数,表示每次询问的的$k_1$和$k_2$。

【输出】

输出Q行,每行一个实数,表示实际总长度,保留三位小数。

【输入样例】

4 8 3
2 1 3 6
3 2 0 7
4 1 7 0
1 4 4 6
2 1 2 7
1 2 2 10
2 2 5 5
4 4 8 9
0.626436771146 0.472537839745
0.977631137354 0.190235819672
0.418883351791 0.221987861358

【输出样例】

12.253
9.671
6.878

【提示】

【数据规模及约定】

对于30%的数据,$N≤30,M≤3000,Q≤3000$;

对于另外30%的数据,$N≤20,M≤25000,Q≤10000$;

对于100%的数据,$N≤35,M≤25000,Q≤200000,1≤x_i,y_i≤N,0≤u_i,v_i≤10^6,k_1,k_2>0$。

您必须 登录 才能发表评论!