乙個無向圖的每條邊都有乙個邊權,選擇乙個區間[l,
r]
[l,r]
[l,r
],然後把這個圖中邊權不在[l,
r]
[l,r]
[l,r
]的邊全部刪掉。會形成多個連通塊。大小為i
ii的連通塊的權值為k
ik_i
ki,求乙個r−l
r-lr−
l盡量小的區間使得剩餘連通塊的權值和≥
s\geq s
≥s。暴力想法:列舉左端點,然後二分右端點,用並查集判斷這個區間是否滿足條件。時間複雜度o(m
2logm
)o(m^2\log m)
o(m2
logm
),期望得分50pt
s50pts
50pts。
但是我們發現右端點為r
rr時,是可以在很快的時間內轉移為右端點為r+1
r+1r+
1的情況。所以我們可以固定左端點,然後指標從左往右掃瞄右端點,每次把權值和進行一下簡單的轉移就可以了。時間複雜度o(m
2)
o(m^2)
o(m2)。
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int n=
5010
;int n,m,x,y,tot,father[n]
,cnt[n]
;ll love[n]
,ans,s,z;
struct edge
e[n]
;void
add(
int from,
int to,ll dis)
intfind
(int x)
bool
cmp(edge x,edge y)
intmain()
sort
(e+1
,e+1
+m,cmp)
; ans=
1e17
;for
(int i=
1;i<=m;i++)}
if(ans<
1e17
)printf
("%lld\n"
,ans)
;else
printf
("t_t\n");
return0;
}
我真是太菜了,考試3h3h
3h看錯題目,最後十幾分鐘才發現,然後暴力還寫掛45pt
s45pts
45pt
s。。。
q wq
qwqqw
q
並查集 Rqnoj331 家族
題目描述 若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。規定 x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的親戚也都是x的親戚。輸入格式 第一行 三個整數n,m,p,n 50...
vijos P1034 家族(並查集)
p1034家族 accepted 標籤 顯示標籤 若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。規定 x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的親戚也都是x的親戚。第一行...
codevs1073 家族 並查集
時間限制 1 s 空間限制 128000 kb 題目等級 大師 master 題解 檢視執行結果 若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。規定 x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的...