You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
859 B
C++
26 lines
859 B
C++
#include <cstdio>
|
|
#include <cstring>
|
|
int fa[10010], X[20010], Y[20010], C1[20010], C2[20010], n, k, m;
|
|
int Find(int x) { return fa[x] == -1 ? x : fa[x] = Find(fa[x]); }
|
|
bool check(int x)
|
|
{
|
|
memset(fa, -1, sizeof(fa));
|
|
int cnt1 = 0, cnt2 = 0;
|
|
for (int i = 1, fx, fy; i < m; i++)
|
|
if ((C1[i] <= x) && ((fx = Find(X[i])) != (fy = Find(Y[i]))))
|
|
cnt1++, fa[fx] = fy;
|
|
for (int i = 1, fx, fy; i < m; i++)
|
|
if ((C2[i] <= x) && ((fx = Find(X[i])) != (fy = Find(Y[i]))))
|
|
cnt2++, fa[fx] = fy;
|
|
return cnt1 >= k && cnt1 + cnt2 == n - 1;
|
|
}
|
|
int main()
|
|
{
|
|
scanf("%d%d%d", &n, &k, &m);
|
|
for (int i = 1; i < m; i++)
|
|
scanf("%d%d%d%d", X + i, Y + i, C1 + i, C2 + i);
|
|
int l = 0, r = 0x3f3f3f3f, mid;
|
|
while (l < r) check(mid = (l + r) >> 1) ? r = mid : l = mid + 1;
|
|
printf("%d", l);
|
|
return 0;
|
|
} |