CSES - Datatähti 2023 alku - Results
Submission details
Task:Kertoma
Sender:Luc
Submission time:2022-11-05 20:37:56 +0200
Language:C++ (C++11)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#10.00 s1, 2, 3details
#20.00 s1, 2, 3details
#30.00 s1, 2, 3details
#40.00 s1, 2, 3details
#50.00 s1, 2, 3details
#60.00 s1, 2, 3details
#70.00 s2, 3details
#80.00 s2, 3details
#90.00 s2, 3details
#100.00 s2, 3details
#110.00 s3details
#120.00 s3details
#130.01 s3details
#140.01 s3details
#150.01 s3details
#160.01 s3details

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:9:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
    9 |         scanf("%d", &n);
      |         ~~~~~^~~~~~~~~~
input/code.cpp:13:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   13 |                 scanf("%d", &x);
      |                 ~~~~~^~~~~~~~~~
input/code.cpp:20:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   20 |                 scanf("%d %d %d", &x, &y, &z);
      |                 ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~

Code

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int main(){
	int n, i = 0, x, y, z;
	scanf("%d", &n);
	vector<int> f;
	vector<int> p(n+1, 0);
	while(i++<n){
		scanf("%d", &x);
		if(x)f.push_back(i);
		else p[i] = 1;
	} 
	vector<pair<int,int>> a[n+1];
	i=1;
	while(i++<n){
		scanf("%d %d %d", &x, &y, &z);
		a[x].push_back({y, z});
		a[y].push_back({x, z});
	}
	priority_queue<pair<ll,int>> q;
	vector<int> pross(n+1);
	vector<ll> dist(n+1);
	i=0;
	ll r=0;
	while(i<(int)f.size()){
		// Dijkstra's algorithm (modified)
		ll l = 299999999ll;
		for(int i=0; i <= n; i++) pross[i] = 0;
		for(int i=0; i <= n; i++) dist[i] = 299999999ll;
		dist[f[i]] = 0;
		q.push({0,f[i]});
		while(!q.empty()){
			x = q.top().second; 
			q.pop();
			if(pross[x]) continue;
			pross[x] = 1;
			for(auto u : a[x]){
				y = u.first;  z = u.second;
				if((dist[x]+z<l) && (dist[x]+z<dist[y])){
					dist[y]=dist[x]+z;
					if(p[y]) l = dist[y];
					q.push({-dist[y], y});
				}
			}
		}
		//
		r+=l;
		i++;
	}
	printf("%lld", r);
}

Test details

Test 1

Group: 1, 2, 3

Verdict:

input
0 0 1 0 0 0 0 0 0 0

correct output
2

user output
0

Test 2

Group: 1, 2, 3

Verdict:

input
0 0 0 0 0 0 1 0 0 0

correct output
3

user output
0

Test 3

Group: 1, 2, 3

Verdict:

input
0 0 1 0 1 0 0 0 0 0

correct output
4

user output
0

Test 4

Group: 1, 2, 3

Verdict:

input
2 0 1 1 0 0 1 0 2 0

correct output
10

user output
299999999

Test 5

Group: 1, 2, 3

Verdict:

input
9 3 1 1 2 2 3 1 6 1

correct output
27

user output
(empty)

Test 6

Group: 1, 2, 3

Verdict:

input
10 4 3 4 3 2 2 4 3 7

correct output
36

user output
(empty)

Test 7

Group: 2, 3

Verdict:

input
71 53 36 30 25 29 42 24 34 29

correct output
199

user output
(empty)

Test 8

Group: 2, 3

Verdict:

input
71 33 46 38 27 45 36 21 35 35

correct output
205

user output
(empty)

Test 9

Group: 2, 3

Verdict:

input
93 38 35 26 43 54 38 25 41 34

correct output
222

user output
(empty)

Test 10

Group: 2, 3

Verdict:

input
100 33 33 45 36 43 38 54 56 36

correct output
242

user output
(empty)

Test 11

Group: 3

Verdict:

input
3419 1797 1845 1849 1879 1791 ...

correct output
5959

user output
(empty)

Test 12

Group: 3

Verdict:

input
4776 2695 2709 2781 2616 2753 ...

correct output
8391

user output
(empty)

Test 13

Group: 3

Verdict:

input
20097 12282 12229 12214 12406 ...

correct output
32001

user output
(empty)

Test 14

Group: 3

Verdict:

input
47934 29918 29878 29713 29984 ...

correct output
71718

user output
(empty)

Test 15

Group: 3

Verdict:

input
84691 54156 54277 54533 54296 ...

correct output
123123

user output
(empty)

Test 16

Group: 3

Verdict:

input
99098 63339 63878 64182 63904 ...

correct output
142663

user output
(empty)