UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#203645#3563. 最大生成树tkswls1004065ms155752kbC++112.5kb2024-02-29 11:38:402024-02-29 13:03:11

answer

#include <bits/stdc++.h>
#define int long long
using namespace std;
struct node {
	int l, r, minn[35], name[35];
} b[400005];
int ans;
int n, m, a[100005][9], maxn[35], op[35];
inline void update(int p) {
	for (int i = 0; i < (1 << m); i++) {
		if (b[2 * p].minn[i] < b[2 * p + 1].minn[i]) {
			b[p].name[i] = b[2 * p].name[i];
		} else {
			b[p].name[i] = b[2 * p + 1].name[i];
		}
		b[p].minn[i] = min(b[2 * p].minn[i], b[2 * p + 1].minn[i]);
	}
}
inline void build(int p, int l, int r) {
	b[p].l = l, b[p].r = r;
	if (l == r) {
		for (int i = 0; i < (1 << m); i++) {
			b[p].minn[i] = 0;
			b[p].name[i] = l;
			for (int j = 0; j < m; j++) {
				if ((i >> j) & 1) {
					b[p].minn[i] += a[l][j + 1];
				} else {
					b[p].minn[i] -= a[l][j + 1];
				}
			}
		}
//		cout << p << " " << l << " " << r << ' ' << b[p].minn[0] << "[]\n";
		return;
	}
	build(2 * p, l, (l + r) >> 1);
	build(2 * p + 1, ((l + r) >> 1) + 1, r);
	update(p);
//	cout << p << " " << l << " " << r << ' ' << b[p].minn[0] << "[]\n";
}
inline void change(int p, int q) {
	if (b[p].l == b[p].r) {
		for (int j = 0; j < (1 << m); j++) {
			b[p].minn[j] = 1e17;
		}
		return;
	}
	int mid = (b[p].l + b[p].r) >> 1;
	if (q <= mid) change(2 * p, q);
	else change(2 * p + 1, q);
	update(p);
//	cout << p << " " << b[p].l << "=====****" << b[p].r << ' ' << b[p].minn[0] << "[]\n";
}
signed main() {
//	freopen("ex_mst3.in", "r", stdin);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> a[i][j];
		}
	}
	build(1, 1, n);
	change(1, 1);
//	cout << b[1].minn[0] << "[]\n";
	for (int i = 0; i < (1 << m); i++) {
		maxn[i] = 0;
		for (int j = 0; j < m; j++) {
			if ((i >> j) & 1) {
				maxn[i] += a[1][j + 1];
			} else {
				maxn[i] -= a[1][j + 1];
			}
		}
	}
//	cout << b[1].minn[0] << "[]\n";
	int maxa = LONG_LONG_MIN, maxb = -1;
	for (int qew = 2; qew <= n; qew++) {
		maxa = LONG_LONG_MIN;
		for (int j = 0; j < (1 << m); j++) {
//			cout << b[1].minn[j] << ' ' << maxn[j] << "|";
			if (maxn[j] - b[1].minn[j] > maxa) {
				maxa = maxn[j] - b[1].minn[j];
				maxb = b[1].name[j];
			}
		}
//		cout << "=====\n";
//		cout << maxa << ' ' << maxb << "\n";
		ans += maxa;
		for (int i = 0; i < (1 << m); i++) {
			op[i] = 0;
			for (int j = 0; j < m; j++) {
				if ((i >> j) & 1) {
					op[i] += a[maxb][j + 1];
				} else {
					op[i] -= a[maxb][j + 1];
				}
			}
			maxn[i] = max(maxn[i], op[i]);
		}
		change(1, maxb);
	}
	cout << ans;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 5
Accepted
time: 0ms
memory: 1280kb

input:

16 3
953426878 284054286 838711178
668499263 -224496686 -499321118
53682534 172847348 -741761953
-37...

output:

49588152186

result:

ok single line: '49588152186'

Test #2:

score: 5
Accepted
time: 0ms
memory: 1284kb

input:

16 5
529897563 42718560 -764294904 546345843 -131064377
-464339380 -913723519 628560030 154631027 25...

output:

71232810493

result:

ok single line: '71232810493'

Test #3:

score: 5
Accepted
time: 0ms
memory: 1280kb

input:

16 5
225834194 -621694937 198912695 61859803 -275724766
287589126 863297652 -126251336 -446563133 84...

output:

70463691200

result:

ok single line: '70463691200'

Test #4:

score: 5
Accepted
time: 0ms
memory: 1284kb

input:

16 3
675758216 925664673 -100467753
-255044844 -119320564 -348819717
104489563 624402309 621346091
7...

output:

45574278940

result:

ok single line: '45574278940'

Test #5:

score: 5
Accepted
time: 4ms
memory: 3708kb

input:

2000 3
101319809 -23603507 546078402
375224051 279401121 -472811178
-969206443 864857136 405994073
-...

output:

8550423308185

result:

ok single line: '8550423308185'

Test #6:

score: 5
Accepted
time: 2ms
memory: 3708kb

input:

2000 4
-484778857 -615354594 133978805 172344089
675220875 275063317 -997782885 856068164
570760530 ...

output:

10870195379896

result:

ok single line: '10870195379896'

Test #7:

score: 5
Accepted
time: 0ms
memory: 3712kb

input:

2000 3
-354104546 610541166 61483675
696986274 207824440 292659920
-611661771 395152481 756286059
-9...

output:

8559275453639

result:

ok single line: '8559275453639'

Test #8:

score: 5
Accepted
time: 7ms
memory: 3708kb

input:

2000 5
966093478 -222359543 173876502 525342202 -365543374
898040767 -660210505 733626218 -870086230...

output:

13100825958903

result:

ok single line: '13100825958903'

Test #9:

score: 5
Accepted
time: 8ms
memory: 3712kb

input:

2000 5
-52237322 -19466788 -924090413 -297261236 -18045574
831291316 940625731 -67474115 -253926074 ...

output:

12934762781492

result:

ok single line: '12934762781492'

Test #10:

score: 5
Accepted
time: 7ms
memory: 3708kb

input:

2000 5
-18204930 -137807275 983978274 -114214924 701701812
-771383102 752985230 715153447 -737257726...

output:

13071831165291

result:

ok single line: '13071831165291'

Test #11:

score: 5
Accepted
time: 106ms
memory: 155748kb

input:

100000 1
-858072701
-959717109
944301573
8592817
565934230
66303209
-920672756
636118541
37167333
73...

output:

149959435811831

result:

ok single line: '149959435811831'

Test #12:

score: 5
Accepted
time: 87ms
memory: 155752kb

input:

100000 1
-634013498
440958380
736196013
950185571
100133154
263742865
626594999
297364348
-390787569...

output:

149998851497510

result:

ok single line: '149998851497510'

Test #13:

score: 5
Accepted
time: 170ms
memory: 155748kb

input:

100000 2
616484717 -218883820
536683727 -592361183
412299173 13246418
-693428127 -424485654
76654342...

output:

299201628231431

result:

ok single line: '299201628231431'

Test #14:

score: 5
Accepted
time: 152ms
memory: 155748kb

input:

100000 2
-231183420 -378090485
328624250 135605118
-856104723 -297979528
545394926 -966624173
117263...

output:

299382013637474

result:

ok single line: '299382013637474'

Test #15:

score: 5
Accepted
time: 344ms
memory: 155752kb

input:

100000 4
471608796 -775067240 953624653 319464968
-314055874 -215087101 385004262 651284620
92260848...

output:

579124678038141

result:

ok single line: '579124678038141'

Test #16:

score: 5
Accepted
time: 640ms
memory: 155748kb

input:

100000 5
133088008 -625818358 580219437 43098825 -316105521
235451619 562584437 303605408 145357481 ...

output:

706431825137853

result:

ok single line: '706431825137853'

Test #17:

score: 5
Accepted
time: 645ms
memory: 155752kb

input:

100000 5
166369337 -206548158 -433644757 290540289 178032746
-895124105 -847288875 -294639705 624198...

output:

707341802314105

result:

ok single line: '707341802314105'

Test #18:

score: 5
Accepted
time: 629ms
memory: 155748kb

input:

100000 5
-717013989 -822017275 534756773 907064833 -680422704
-271305944 -227110360 -671423139 -5923...

output:

703654594430108

result:

ok single line: '703654594430108'

Test #19:

score: 5
Accepted
time: 615ms
memory: 155748kb

input:

100000 5
472023095 120730360 677466207 689979178 -310652220
-435574711 897762285 883858915 -30436199...

output:

707007494019674

result:

ok single line: '707007494019674'

Test #20:

score: 5
Accepted
time: 649ms
memory: 155752kb

input:

100000 5
-181841793 -852953085 272276165 528776289 620825974
-245365795 -413151026 296716527 -701182...

output:

701964080014126

result:

ok single line: '701964080014126'

Extra Test:

score: 0
Extra Test Passed