UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#213069#2675. Road Reformx_add_b801052ms11348kbC++112.0kb2024-11-09 19:02:172024-11-09 23:04:45

answer

#include<bits/stdc++.h>

namespace IO
{
	template<typename Type>
	void read(Type &x){
		char ch=getchar();
		x=0;bool f=0;
		while(ch<'0'||ch>'9')
			f|=(ch=='-'),ch=getchar();
		while(ch>='0'&&ch<='9')
			x=((x<<1)+(x<<3)+(ch^48)),ch=getchar();
		x=f?-x:x;
	}
}

using namespace std;

#define LL long long
#define N 200005

int n,m,u,v,pos1,pos2,pos3;
LL k,w,ans=1e18,ans1;
int head[N],f[N];

struct node
{
	int u,v;LL w;int idx;
	bool operator < (const node &a) const
	{
		return abs(w-k)<abs(a.w-k);
	 }
}e1[N],e2[N],e3[N];

void init(){for(int i=1;i<=n;i++) f[i]=i;}
int find(int x){return (x==f[x])?x:f[x]=find(f[x]);}
void Merge(int a,int b){f[find(a)]=find(b);}
bool Judge(int a,int b){return find(a)==find(b);}

bool cmp(node a,node b)
{
	return a.w<b.w;
}

bool Kruskal1()
{
	init();
	sort(e1+1,e1+pos1+1);
	int cnt=0;
	ans1=1e18;
	for(int i=1;i<=pos1&&cnt<n-1;i++){
		int u=e1[i].u,v=e1[i].v;LL w=e1[i].w;
		if(Judge(u,v)) continue ;
		cnt++;Merge(u,v);
		ans1=min(ans1,k-w);
	}
	return (cnt==n-1);
}

bool Kruskal2()
{
	init();
	sort(e2+1,e2+pos2+1);
	int cnt=0;
	ans1=0;
	for(int i=1;i<=pos2&&cnt<n-1;i++){
		int u=e2[i].u,v=e2[i].v;LL w=e2[i].w;
		if(Judge(u,v)) continue ;
		cnt++;Merge(u,v);
		ans1+=abs(w-k);
	}
	return (cnt==n-1);
}

bool Kruskal3()
{
	init();
	sort(e3+1,e3+pos3+1,cmp);
	int cnt=1;
	ans1=0;
	if(pos2==0) return false;
	int tot=e2[1].idx;ans1+=(e2[1].w-k);
	Merge(e2[1].u,e2[1].v);
	for(int i=1;i<=pos3&&cnt<n-1;i++){
		int u=e3[i].u,v=e3[i].v;LL w=e3[i].w;
		if(Judge(u,v)||e3[i].idx==tot) continue ;
		cnt++;Merge(u,v);
		if(w>k) ans1+=(w-k);
	}
	return true;
}


int main()
{
	IO::read(n);IO::read(m);IO::read(k);
	for(int i=1;i<=m;i++){
		IO::read(u);IO::read(v);IO::read(w);
		if(w<=k) e1[++pos1]={u,v,w,i};
		if(w>k) e2[++pos2]={u,v,w,i};
		e3[++pos3]={u,v,w,i};
	}
	if(Kruskal1())
		ans=min(ans,ans1);
	if(Kruskal2())
		ans=min(ans,ans1);
	if(Kruskal3())
		ans=min(ans,ans1);
	printf("%lld",ans);
}

详细

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

Test #1:

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

input:

20 80 10
11 10 207
8 15 45
2 9 253
10 8 91
10 14 174
20 19 272
20 3 69
4 7 9
19 12 192
3 5 21
20 1 2...

output:

651

result:

ok single line: '651'

Test #2:

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

input:

20 80 10
8 15 24
16 14 128
7 9 8
6 1 12
4 11 273
9 14 238
8 17 155
11 5 220
15 10 132
17 7 10
9 18 1...

output:

569

result:

ok single line: '569'

Test #3:

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

input:

20 80 10
1 13 196
6 2 133
11 14 193
4 11 148
11 19 21
16 15 84
3 19 201
5 15 286
11 16 161
12 13 296...

output:

633

result:

ok single line: '633'

Test #4:

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

input:

20 80 10
5 15 33
9 13 52
9 5 48
8 3 251
6 9 281
8 9 111
18 17 48
8 14 145
19 15 299
4 20 88
6 2 281
...

output:

596

result:

ok single line: '596'

Test #5:

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

input:

20 80 10
6 15 124
7 15 242
6 5 172
11 2 46
3 4 273
2 4 173
7 9 175
9 16 264
17 14 15
16 17 211
8 18 ...

output:

989

result:

ok single line: '989'

Test #6:

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

input:

20 80 10
6 5 252
2 20 182
20 14 107
5 15 128
4 10 283
8 17 21
2 17 203
9 4 289
18 4 218
3 15 25
10 9...

output:

571

result:

ok single line: '571'

Test #7:

score: 0
Wrong Answer
time: 26ms
memory: 5872kb

input:

2000 100000 800
1287 1255 1987
1744 883 836
149 1453 1336
351 1172 1071
850 1465 848
740 1675 863
11...

output:

7

result:

wrong answer 1st lines differ - expected: '6', found: '7'

Test #8:

score: 0
Wrong Answer
time: 34ms
memory: 5872kb

input:

2000 100000 800
540 62 1546
684 1940 1135
506 1341 1784
1850 361 1977
18 140 1635
1651 1916 1907
199...

output:

58

result:

wrong answer 1st lines differ - expected: '57', found: '58'

Test #9:

score: 0
Wrong Answer
time: 27ms
memory: 5868kb

input:

2000 100000 800
1450 642 1197
990 388 1850
1656 809 1402
725 786 1349
613 1059 890
1259 1575 1064
95...

output:

2

result:

wrong answer 1st lines differ - expected: '1', found: '2'

Test #10:

score: 5
Accepted
time: 34ms
memory: 5880kb

input:

2000 100000 10000000
232 194 5205389
1290 1320 94756446
1596 1172 8604877
1838 1057 38095640
1301 54...

output:

169

result:

ok single line: '169'

Test #11:

score: 5
Accepted
time: 41ms
memory: 5888kb

input:

2000 100000 10000000
1377 361 48147042
1023 1928 5049880
1696 843 14727225
920 1294 58661444
1665 51...

output:

533

result:

ok single line: '533'

Test #12:

score: 0
Wrong Answer
time: 33ms
memory: 5884kb

input:

2000 100000 10000000
23 1840 61297021
1090 1814 98946038
1413 1691 85852947
86 1463 92991569
1268 82...

output:

231675

result:

wrong answer 1st lines differ - expected: '230103', found: '231675'

Test #13:

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

input:

200000 200000 10000000
163447 52269 827108961
69433 60328 8764874
184517 157379 878957413
2825 13277...

output:

98144644196729

result:

ok single line: '98144644196729'

Test #14:

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

input:

200000 200000 10000000
26437 26449 733968315
72457 129890 760533116
45625 117585 453891083
113120 65...

output:

97982017911608

result:

ok single line: '97982017911608'

Test #15:

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

input:

200000 200000 10000000
134481 172469 958604013
187505 51187 883335613
78523 97379 748522908
76899 44...

output:

98108458217572

result:

ok single line: '98108458217572'

Test #16:

score: 5
Accepted
time: 104ms
memory: 11344kb

input:

200000 200000 10000000
31044 159067 847353551
87451 43252 982699932
138867 5542 154557540
83604 6864...

output:

98165693118564

result:

ok single line: '98165693118564'

Test #17:

score: 5
Accepted
time: 117ms
memory: 11348kb

input:

200000 200000 10000000
19846 69397 59750638
19566 101018 183206436
7465 190436 164547218
192600 1650...

output:

98270021595856

result:

ok single line: '98270021595856'

Test #18:

score: 5
Accepted
time: 101ms
memory: 11344kb

input:

200000 200000 10000000
75029 14324 856954422
6328 45799 557275111
92416 7355 61760133
58432 149196 6...

output:

98016594710576

result:

ok single line: '98016594710576'

Test #19:

score: 5
Accepted
time: 110ms
memory: 11348kb

input:

200000 200000 10000000
50062 13355 435813272
161002 4865 505414563
118169 48194 579627562
139289 413...

output:

98085543969676

result:

ok single line: '98085543969676'

Test #20:

score: 5
Accepted
time: 107ms
memory: 11348kb

input:

200000 200000 10000000
5476 97888 999474454
20665 24758 972246854
170123 118973 486801275
114106 174...

output:

97937044812669

result:

ok single line: '97937044812669'