답안 #781070

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
781070 2023-07-12T16:57:29 Z aZvezda Reconstruction Project (JOI22_reconstruction) C++14
100 / 100
1743 ms 430824 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#ifndef LOCAL
#define cerr if(false)cerr
#endif

const ll MAX_N = 2e5 + 10; 
ll n, m;
pair<ll, pair<ll, ll> > edg[MAX_N];

struct {
	ll par[MAX_N], sz[MAX_N];
	vector<ll> now;

	void reset() {
		for(ll i = 1; i <= n; i ++) {
			par[i] = i;
			sz[i] = 1;
		}
		now.resize(0);
	}

	ll find(ll x) {
		if(par[x] == x) {
			return x;
		} else {
			return par[x] = find(par[x]);
		}
	}

	bool merge(ll x, ll y, ll c) {
		x = find(x); y = find(y);
		if(x == y) { return false; }
		if(sz[x] < sz[y]) { swap(x, y); }
		par[y] = x;
		sz[x] += sz[y];
		now.push_back(c);
		return true;
	}
} dsu;

vector<ll> cand[MAX_N];
ll lft[MAX_N], rght[MAX_N];

signed main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL);

	cin >> n >> m;
	for(ll i = 0; i < m; i ++) {
		cin >> edg[i].second.first >> edg[i].second.second >> edg[i].first;
	}
	sort(edg, edg + m);

	dsu.reset();
	for(ll i = 0; i < m; i ++) {
		int other = -1;
		dsu.reset();
		dsu.merge(edg[i].second.first, edg[i].second.second, i);
		if(i != 0) for(const auto j : cand[i - 1]) {
			if(!dsu.merge(edg[j].second.first, edg[j].second.second, j)) {
				other = j;
			}
		}
		cand[i] = dsu.now;
		if(other != -1) {
			lft[i] = (edg[i].first + edg[other].first + 2ll) / 2ll;
			rght[other] = (edg[i].first + edg[other].first) / 2ll;
		} else {
			lft[i] = -1e12;
		}
		rght[i] = 1e12;
	}

	priority_queue<pair<ll, pair<ll, ll> > > pq;
	for(int i = 0; i < m; i ++) {
		pq.push({-lft[i], {-1, edg[i].first}});
		pq.push({-edg[i].first, {0, edg[i].first}});
		pq.push({-rght[i] - 1, {1, edg[i].first}});
	}

	ll cntadd = 0;
	ll cntrem = 0;
	ll sum = 0;

	ll q;
	cin >> q;
	while(q --) {
		ll x;
		cin >> x;
		while(!pq.empty() && -pq.top().first <= x) {
			auto curr = pq.top(); pq.pop();
			if(curr.second.first == -1) {
				cntadd ++;
				sum += curr.second.second;
			} else if(curr.second.first == 0) {
				cntadd --;
				cntrem ++;
				sum -= curr.second.second * 2ll;
			} else {
				cntrem --;
				sum += curr.second.second;
			}
		}
		ll ans = sum - cntadd * x + cntrem * x;
		cout << ans << endl;
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 4948 KB Output is correct
3 Correct 2 ms 4948 KB Output is correct
4 Correct 2 ms 4948 KB Output is correct
5 Correct 2 ms 4948 KB Output is correct
6 Correct 2 ms 4948 KB Output is correct
7 Correct 2 ms 4948 KB Output is correct
8 Correct 2 ms 4948 KB Output is correct
9 Correct 3 ms 4948 KB Output is correct
10 Correct 3 ms 4948 KB Output is correct
11 Correct 3 ms 4948 KB Output is correct
12 Correct 3 ms 4948 KB Output is correct
13 Correct 2 ms 4948 KB Output is correct
14 Correct 3 ms 4948 KB Output is correct
15 Correct 2 ms 4948 KB Output is correct
16 Correct 2 ms 4948 KB Output is correct
17 Correct 3 ms 4948 KB Output is correct
18 Correct 3 ms 4948 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 4948 KB Output is correct
3 Correct 2 ms 4948 KB Output is correct
4 Correct 2 ms 4948 KB Output is correct
5 Correct 2 ms 4948 KB Output is correct
6 Correct 2 ms 4948 KB Output is correct
7 Correct 2 ms 4948 KB Output is correct
8 Correct 2 ms 4948 KB Output is correct
9 Correct 3 ms 4948 KB Output is correct
10 Correct 3 ms 4948 KB Output is correct
11 Correct 3 ms 4948 KB Output is correct
12 Correct 3 ms 4948 KB Output is correct
13 Correct 2 ms 4948 KB Output is correct
14 Correct 3 ms 4948 KB Output is correct
15 Correct 2 ms 4948 KB Output is correct
16 Correct 2 ms 4948 KB Output is correct
17 Correct 3 ms 4948 KB Output is correct
18 Correct 3 ms 4948 KB Output is correct
19 Correct 3 ms 4948 KB Output is correct
20 Correct 627 ms 411612 KB Output is correct
21 Correct 540 ms 390648 KB Output is correct
22 Correct 548 ms 406464 KB Output is correct
23 Correct 532 ms 410548 KB Output is correct
24 Correct 501 ms 411232 KB Output is correct
25 Correct 556 ms 411452 KB Output is correct
26 Correct 567 ms 411536 KB Output is correct
27 Correct 535 ms 411628 KB Output is correct
28 Correct 507 ms 411616 KB Output is correct
29 Correct 538 ms 411008 KB Output is correct
30 Correct 542 ms 411576 KB Output is correct
31 Correct 516 ms 411560 KB Output is correct
32 Correct 516 ms 411616 KB Output is correct
33 Correct 513 ms 411544 KB Output is correct
34 Correct 444 ms 411580 KB Output is correct
35 Correct 550 ms 411528 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4948 KB Output is correct
2 Correct 2 ms 4948 KB Output is correct
3 Correct 2 ms 4948 KB Output is correct
4 Correct 1717 ms 425336 KB Output is correct
5 Correct 1639 ms 428104 KB Output is correct
6 Correct 1743 ms 427968 KB Output is correct
7 Correct 1440 ms 272568 KB Output is correct
8 Correct 1394 ms 242668 KB Output is correct
9 Correct 1397 ms 238256 KB Output is correct
10 Correct 1567 ms 428132 KB Output is correct
11 Correct 1385 ms 244924 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 4948 KB Output is correct
3 Correct 2 ms 4948 KB Output is correct
4 Correct 2 ms 4948 KB Output is correct
5 Correct 2 ms 4948 KB Output is correct
6 Correct 2 ms 4948 KB Output is correct
7 Correct 2 ms 4948 KB Output is correct
8 Correct 2 ms 4948 KB Output is correct
9 Correct 3 ms 4948 KB Output is correct
10 Correct 3 ms 4948 KB Output is correct
11 Correct 3 ms 4948 KB Output is correct
12 Correct 3 ms 4948 KB Output is correct
13 Correct 2 ms 4948 KB Output is correct
14 Correct 3 ms 4948 KB Output is correct
15 Correct 2 ms 4948 KB Output is correct
16 Correct 2 ms 4948 KB Output is correct
17 Correct 3 ms 4948 KB Output is correct
18 Correct 3 ms 4948 KB Output is correct
19 Correct 2 ms 4948 KB Output is correct
20 Correct 1116 ms 20296 KB Output is correct
21 Correct 1122 ms 20284 KB Output is correct
22 Correct 1148 ms 20344 KB Output is correct
23 Correct 1133 ms 20360 KB Output is correct
24 Correct 1156 ms 20360 KB Output is correct
25 Correct 1159 ms 20284 KB Output is correct
26 Correct 1184 ms 20316 KB Output is correct
27 Correct 1120 ms 20256 KB Output is correct
28 Correct 1187 ms 20248 KB Output is correct
29 Correct 1151 ms 20352 KB Output is correct
30 Correct 1125 ms 20300 KB Output is correct
31 Correct 1205 ms 20252 KB Output is correct
32 Correct 1174 ms 20920 KB Output is correct
33 Correct 1110 ms 20212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 4948 KB Output is correct
3 Correct 2 ms 4948 KB Output is correct
4 Correct 2 ms 4948 KB Output is correct
5 Correct 2 ms 4948 KB Output is correct
6 Correct 2 ms 4948 KB Output is correct
7 Correct 2 ms 4948 KB Output is correct
8 Correct 2 ms 4948 KB Output is correct
9 Correct 3 ms 4948 KB Output is correct
10 Correct 3 ms 4948 KB Output is correct
11 Correct 3 ms 4948 KB Output is correct
12 Correct 3 ms 4948 KB Output is correct
13 Correct 2 ms 4948 KB Output is correct
14 Correct 3 ms 4948 KB Output is correct
15 Correct 2 ms 4948 KB Output is correct
16 Correct 2 ms 4948 KB Output is correct
17 Correct 3 ms 4948 KB Output is correct
18 Correct 3 ms 4948 KB Output is correct
19 Correct 3 ms 4948 KB Output is correct
20 Correct 627 ms 411612 KB Output is correct
21 Correct 540 ms 390648 KB Output is correct
22 Correct 548 ms 406464 KB Output is correct
23 Correct 532 ms 410548 KB Output is correct
24 Correct 501 ms 411232 KB Output is correct
25 Correct 556 ms 411452 KB Output is correct
26 Correct 567 ms 411536 KB Output is correct
27 Correct 535 ms 411628 KB Output is correct
28 Correct 507 ms 411616 KB Output is correct
29 Correct 538 ms 411008 KB Output is correct
30 Correct 542 ms 411576 KB Output is correct
31 Correct 516 ms 411560 KB Output is correct
32 Correct 516 ms 411616 KB Output is correct
33 Correct 513 ms 411544 KB Output is correct
34 Correct 444 ms 411580 KB Output is correct
35 Correct 550 ms 411528 KB Output is correct
36 Correct 532 ms 411640 KB Output is correct
37 Correct 481 ms 388852 KB Output is correct
38 Correct 500 ms 406796 KB Output is correct
39 Correct 502 ms 410724 KB Output is correct
40 Correct 521 ms 411360 KB Output is correct
41 Correct 531 ms 411516 KB Output is correct
42 Correct 560 ms 411532 KB Output is correct
43 Correct 548 ms 411684 KB Output is correct
44 Correct 541 ms 411580 KB Output is correct
45 Correct 474 ms 411000 KB Output is correct
46 Correct 538 ms 411648 KB Output is correct
47 Correct 528 ms 411652 KB Output is correct
48 Correct 558 ms 411536 KB Output is correct
49 Correct 539 ms 411576 KB Output is correct
50 Correct 415 ms 411568 KB Output is correct
51 Correct 557 ms 411600 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4948 KB Output is correct
2 Correct 3 ms 4948 KB Output is correct
3 Correct 2 ms 4948 KB Output is correct
4 Correct 2 ms 4948 KB Output is correct
5 Correct 2 ms 4948 KB Output is correct
6 Correct 2 ms 4948 KB Output is correct
7 Correct 2 ms 4948 KB Output is correct
8 Correct 2 ms 4948 KB Output is correct
9 Correct 3 ms 4948 KB Output is correct
10 Correct 3 ms 4948 KB Output is correct
11 Correct 3 ms 4948 KB Output is correct
12 Correct 3 ms 4948 KB Output is correct
13 Correct 2 ms 4948 KB Output is correct
14 Correct 3 ms 4948 KB Output is correct
15 Correct 2 ms 4948 KB Output is correct
16 Correct 2 ms 4948 KB Output is correct
17 Correct 3 ms 4948 KB Output is correct
18 Correct 3 ms 4948 KB Output is correct
19 Correct 3 ms 4948 KB Output is correct
20 Correct 627 ms 411612 KB Output is correct
21 Correct 540 ms 390648 KB Output is correct
22 Correct 548 ms 406464 KB Output is correct
23 Correct 532 ms 410548 KB Output is correct
24 Correct 501 ms 411232 KB Output is correct
25 Correct 556 ms 411452 KB Output is correct
26 Correct 567 ms 411536 KB Output is correct
27 Correct 535 ms 411628 KB Output is correct
28 Correct 507 ms 411616 KB Output is correct
29 Correct 538 ms 411008 KB Output is correct
30 Correct 542 ms 411576 KB Output is correct
31 Correct 516 ms 411560 KB Output is correct
32 Correct 516 ms 411616 KB Output is correct
33 Correct 513 ms 411544 KB Output is correct
34 Correct 444 ms 411580 KB Output is correct
35 Correct 550 ms 411528 KB Output is correct
36 Correct 2 ms 4948 KB Output is correct
37 Correct 2 ms 4948 KB Output is correct
38 Correct 2 ms 4948 KB Output is correct
39 Correct 1717 ms 425336 KB Output is correct
40 Correct 1639 ms 428104 KB Output is correct
41 Correct 1743 ms 427968 KB Output is correct
42 Correct 1440 ms 272568 KB Output is correct
43 Correct 1394 ms 242668 KB Output is correct
44 Correct 1397 ms 238256 KB Output is correct
45 Correct 1567 ms 428132 KB Output is correct
46 Correct 1385 ms 244924 KB Output is correct
47 Correct 2 ms 4948 KB Output is correct
48 Correct 1116 ms 20296 KB Output is correct
49 Correct 1122 ms 20284 KB Output is correct
50 Correct 1148 ms 20344 KB Output is correct
51 Correct 1133 ms 20360 KB Output is correct
52 Correct 1156 ms 20360 KB Output is correct
53 Correct 1159 ms 20284 KB Output is correct
54 Correct 1184 ms 20316 KB Output is correct
55 Correct 1120 ms 20256 KB Output is correct
56 Correct 1187 ms 20248 KB Output is correct
57 Correct 1151 ms 20352 KB Output is correct
58 Correct 1125 ms 20300 KB Output is correct
59 Correct 1205 ms 20252 KB Output is correct
60 Correct 1174 ms 20920 KB Output is correct
61 Correct 1110 ms 20212 KB Output is correct
62 Correct 532 ms 411640 KB Output is correct
63 Correct 481 ms 388852 KB Output is correct
64 Correct 500 ms 406796 KB Output is correct
65 Correct 502 ms 410724 KB Output is correct
66 Correct 521 ms 411360 KB Output is correct
67 Correct 531 ms 411516 KB Output is correct
68 Correct 560 ms 411532 KB Output is correct
69 Correct 548 ms 411684 KB Output is correct
70 Correct 541 ms 411580 KB Output is correct
71 Correct 474 ms 411000 KB Output is correct
72 Correct 538 ms 411648 KB Output is correct
73 Correct 528 ms 411652 KB Output is correct
74 Correct 558 ms 411536 KB Output is correct
75 Correct 539 ms 411576 KB Output is correct
76 Correct 415 ms 411568 KB Output is correct
77 Correct 557 ms 411600 KB Output is correct
78 Correct 1643 ms 427880 KB Output is correct
79 Correct 1638 ms 404340 KB Output is correct
80 Correct 1652 ms 423904 KB Output is correct
81 Correct 1634 ms 427816 KB Output is correct
82 Correct 1715 ms 427720 KB Output is correct
83 Correct 1660 ms 427652 KB Output is correct
84 Correct 1668 ms 427748 KB Output is correct
85 Correct 1670 ms 427844 KB Output is correct
86 Correct 1636 ms 427708 KB Output is correct
87 Correct 1610 ms 428800 KB Output is correct
88 Correct 1631 ms 427716 KB Output is correct
89 Correct 1659 ms 427772 KB Output is correct
90 Correct 1632 ms 427804 KB Output is correct
91 Correct 1654 ms 427688 KB Output is correct
92 Correct 1528 ms 430824 KB Output is correct
93 Correct 1624 ms 428848 KB Output is correct