題解:這個題中逃犯是可以連續移動的,而不是移動到乙個位置後停止,所以用並查集find函式將每個點的最開始的那個點作為父親,然後求屬於此節點的總和,最後排序找出前m大。
#include
#include
#include
#include
using namespace std;
int n,m,x;
int pre[
100010];
intfind
(int x)
int a[
100010];
long
long sum[
100010];
intmain()
for(
int i=
1;i<=n;i++
) sum[
find
(i)]
+=a[i]
;//屬於此根節點的數求和
sort
(sum+
1,sum+
1+n)
;//排序
long
long num=0;
for(
int i=n;i>n-m&&i>=
1;i--
)//注意i>=1不可少
num+
=sum[i]
; cout
}
並查集 牛客練習賽41 C抓捕盜竊犯
題目鏈結 題意,初始每乙個城市都有一夥盜賊,沒過乙個時刻盜賊就會逃竄到另乙個城市,你可以在m個城市設定監察站,會逮捕所有經過該城市的盜賊 分析 仔細分細題目,因為每個城市的盜賊都是流動的,這就可能會形成環,而如果成環的話,在環所在任一城市都可以把這批城市的全部盜賊逮捕,就不需要再環上設多個監察站了,...
牛客練習賽41E 球的體積並
題解 先判斷一下兩個球不相交以及包含的關係,比較好考慮,然後就是兩個球有交集的時候,主要就是求兩個弧面對應的高,可以設夾角,然後利用cos角的關係就是餘玄定理表示對應的高,最後就是求相交的體積,得出結果。include include include include include using na...
牛客練習賽16C 任意點 並查集
平面上有若干個點,從每個點出發,你可以往東南西北任意方向走,直到碰到另乙個點,然後才可以改變方向。請問至少需要加多少個點,使得點對之間互相可以到達。第一行乙個整數n表示點數 1 n 100 第二行n行,每行兩個整數xi,yi表示座標 1 xi,yi 1000 y軸正方向為北,x軸正方形為東。輸出乙個...