Task: | Sadonkorjuu |
Sender: | Luc |
Submission time: | 2022-11-12 21:50:52 +0200 |
Language: | C++ (C++11) |
Status: | READY |
Result: | 0 |
group | verdict | score |
---|---|---|
#1 | WRONG ANSWER | 0 |
#2 | WRONG ANSWER | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.00 s | 1, 2 | details |
#2 | ACCEPTED | 0.00 s | 1, 2 | details |
#3 | ACCEPTED | 0.00 s | 1, 2 | details |
#4 | ACCEPTED | 0.00 s | 1, 2 | details |
#5 | ACCEPTED | 0.00 s | 1, 2 | details |
#6 | WRONG ANSWER | 0.00 s | 1, 2 | details |
#7 | WRONG ANSWER | 0.15 s | 2 | details |
#8 | ACCEPTED | 0.00 s | 1, 2 | details |
#9 | WRONG ANSWER | 0.15 s | 2 | details |
#10 | ACCEPTED | 0.00 s | 1, 2 | details |
#11 | ACCEPTED | 0.15 s | 2 | details |
#12 | ACCEPTED | 0.13 s | 2 | details |
#13 | ACCEPTED | 0.11 s | 2 | details |
#14 | ACCEPTED | 0.11 s | 2 | details |
#15 | ACCEPTED | 0.00 s | 1, 2 | details |
#16 | ACCEPTED | 0.00 s | 1, 2 | details |
#17 | ACCEPTED | 0.00 s | 1, 2 | details |
#18 | WRONG ANSWER | 0.00 s | 1, 2 | details |
#19 | ACCEPTED | 0.00 s | 1, 2 | details |
#20 | ACCEPTED | 0.00 s | 1, 2 | details |
#21 | WRONG ANSWER | 0.10 s | 2 | details |
#22 | ACCEPTED | 0.11 s | 2 | details |
#23 | ACCEPTED | 0.11 s | 2 | details |
#24 | ACCEPTED | 0.00 s | 1, 2 | details |
#25 | ACCEPTED | 0.11 s | 2 | details |
#26 | ACCEPTED | 0.00 s | 1, 2 | details |
#27 | ACCEPTED | 0.11 s | 2 | details |
#28 | ACCEPTED | 0.01 s | 1, 2 | details |
#29 | ACCEPTED | 0.10 s | 2 | details |
#30 | ACCEPTED | 0.00 s | 1, 2 | details |
#31 | ACCEPTED | 0.10 s | 2 | details |
Compiler report
input/code.cpp: In function 'int main()': input/code.cpp:50:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result] 50 | scanf("%d", &n); | ~~~~~^~~~~~~~~~ input/code.cpp:59:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result] 59 | scanf("%d", &x); | ~~~~~^~~~~~~~~~ input/code.cpp:69:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result] 69 | scanf("%d %d %d", &x, &y, &z); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Code
#include <bits/stdc++.h> using namespace std; typedef long long ll; // A is a line of cities waiting to be processed stack<pair<int, int>> a; // (prosses city) | arguments 1-3: shared arrays from the main function | argument 4: city to be processed | argument 5: previously processed city | argument 6: shortest known distance to a port ll processC(vector<ll> * sp, vector<bool> * field, vector<vector<pair<int, int>>> * conn, vector<bool> * pross, int c, int pc, ll cp){ // In this function all arrays will have an extra [0] after the name (array[r] -> array[0][r]), this is because they are pointers if(!(field[0][c])){ // if the city has a port if(!pross[0][c]){ // if the city has not yet been processed // Loop that calls this function recursively to process each city connected to this city for(vector<pair<int,int>>::iterator it = conn[0][c].begin(); it!= conn[0][c].end(); it++){ if(it->first==pc) continue; // Don't process the city which was previously processed if(!field[0][it->first]) a.push({it->first,c}); // Two ports in a row, so we move that city to the processing line in order to not make this function to recursive else processC(sp,field,conn,pross,it->first, c, 0+(ll)it->second); } pross[0][c]=1; // the city has now been processed } // The city has a port so the shortest distance from the city to a port is 0 return 0ll; } int t; // (temporary) bool b = 0; //(boolean) to check if the value of cp ((distance to) closest port) changes during the loop if( (!pross[0][c]) || sp[0][c]>cp){ // if the city has already been processed and cp is not smaller than the stored shortest distance to a port, then we don't need to reprocess the port for(vector<pair<int,int>>::iterator it = conn[0][c].begin(); it!= conn[0][c].end(); it++){// and can simply return the value of cp if(it->first==pc) continue; // Don't process the city which was previously processed t=processC(sp,field,conn,pross,it->first, c, cp+(ll)it->second); if(t+(ll)it->second<cp){ // if the sum of the value returned by the processed city and the distance to said city is smaller than cp, cp should be changed to the sum cp=t+(ll)it->second; b = 1; // value of cp has changed during the loop } } // If the value of cp changed during the processing of the city we will need to reprocess it so that all cities connected to it will be processed with the true cp value if(b) processC(sp,field,conn,pross,c, pc, cp); pross[0][c]=1; // the city has now been processed sp[0][c]=cp; // store the value of cp to the array of shortest distances } return cp; } int main(){ int n, i = 0, x, y, z; scanf("%d", &n); vector<ll> sp(n+1, 2999999999ll); // (shortest path) Array to store distance to closest port (default value 2999999999, because the distance to a port can never be 2999999999, // so if the processing function will for each city with a field eventually change this value to the correct distance) vector<bool> field(n+1, 0); // Boolean array to store which cities contain fields (0 = false && 1 = true) // Checking if each city has a port or a field: while(i++<n){ scanf("%d", &x); field[i]=(bool)x; } vector<vector<pair<int, int>>> conn(n+1); // (connections) Array to store roads going out from each city like: conn[city 1] = {city 2, distance} & {city 3, distance} etc. vector<bool> pross(n+1, 0); // (prossesed) Array to store which cities have been processed // Storing the roads connecting the cities: i=1; while(i++<n){ scanf("%d %d %d", &x, &y, &z); conn[x].push_back({y,z}); conn[y].push_back({x,z}); } // A is a line of cities waiting to be processed, format: {cityX, cityY}, where cityX is the city to be processed and // cityY is the "previous" processed city (aka the city which the function will belive was previous to be processed) a.push({1, 0}); // Putting the city 1 into the line of cities being processed (previously processed city: 0, aka a non existent city since city 1 is the first one to be processed) pair<int, int> t; // (temporary) A temporary variable for storing the data of the first element in line // Calling the processC() function on the city in at the front of the line, untill the line is empty while(!a.empty()){ t=a.top(); a.pop(); processC(&sp,&field,&conn,&pross,t.first,t.second, 2999999999ll); // For more info on what this means check the declatation of processC() above. ^ } i=0; ll r = 0; //(restult) the variable where the sum of the shortest distances from each port to their closest city will be stored // counting the sum: while(i++<n) if(field[i])r+=sp[i]; // only add the value of a city, if that city is has a field printf("%lld", r); }
Test details
Test 1
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1 0 |
correct output |
---|
0 |
user output |
---|
0 |
Test 2
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 0 0 0 0 0 1 2 1 2 3 2 3 4 3 ... |
correct output |
---|
0 |
user output |
---|
0 |
Test 3
Group: 1, 2
Verdict: ACCEPTED
input |
---|
4 1 0 1 1 1 2 10 2 3 20 2 4 30 |
correct output |
---|
60 |
user output |
---|
60 |
Test 4
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 0 1 1 1 0 1 2 10 2 3 20 3 4 30 ... |
correct output |
---|
80 |
user output |
---|
80 |
Test 5
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 0 1 0 1 1 1 2 1 2 3 5 3 4 3 ... |
correct output |
---|
6 |
user output |
---|
6 |
Test 6
Group: 1, 2
Verdict: WRONG ANSWER
input |
---|
1000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
5506363 |
user output |
---|
-1293664660561 |
Test 7
Group: 2
Verdict: WRONG ANSWER
input |
---|
200000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
1795118520 |
user output |
---|
-258988865776933 |
Test 8
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 0 0 1 0 1 1 0 1 0 1 1 0 0 0 1 ... |
correct output |
---|
293576 |
user output |
---|
293576 |
Test 9
Group: 2
Verdict: WRONG ANSWER
input |
---|
200000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
816932444 |
user output |
---|
-255356225370784 |
Test 10
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
correct output |
---|
3089 |
user output |
---|
3089 |
Test 11
Group: 2
Verdict: ACCEPTED
input |
---|
200000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
correct output |
---|
40839 |
user output |
---|
40839 |
Test 12
Group: 2
Verdict: ACCEPTED
input |
---|
200000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
5683983203973 |
user output |
---|
5683983203973 |
Test 13
Group: 2
Verdict: ACCEPTED
input |
---|
200000 0 1 1 1 1 1 1 0 0 0 1 1 0 1 0 ... |
correct output |
---|
58572993 |
user output |
---|
58572993 |
Test 14
Group: 2
Verdict: ACCEPTED
input |
---|
200000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
correct output |
---|
32755 |
user output |
---|
32755 |
Test 15
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
126238345 |
user output |
---|
126238345 |
Test 16
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 0 0 0 1 0 1 1 1 0 0 1 0 1 1 0 ... |
correct output |
---|
278678 |
user output |
---|
278678 |
Test 17
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 ... |
correct output |
---|
34929 |
user output |
---|
34929 |
Test 18
Group: 1, 2
Verdict: WRONG ANSWER
input |
---|
1000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
1543963 |
user output |
---|
-778267890417 |
Test 19
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
correct output |
---|
39606 |
user output |
---|
39606 |
Test 20
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 1 0 1 0 1 0 0 0 0 1 1 0 0 0 1 ... |
correct output |
---|
321598 |
user output |
---|
321598 |
Test 21
Group: 2
Verdict: WRONG ANSWER
input |
---|
200000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
978670626 |
user output |
---|
-246280547051967 |
Test 22
Group: 2
Verdict: ACCEPTED
input |
---|
200000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... |
correct output |
---|
375218 |
user output |
---|
375218 |
Test 23
Group: 2
Verdict: ACCEPTED
input |
---|
200000 1 1 1 1 0 0 0 0 0 1 0 1 0 1 1 ... |
correct output |
---|
60422556 |
user output |
---|
60422556 |
Test 24
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
291990 |
user output |
---|
291990 |
Test 25
Group: 2
Verdict: ACCEPTED
input |
---|
200000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
59607954 |
user output |
---|
59607954 |
Test 26
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
990 |
user output |
---|
990 |
Test 27
Group: 2
Verdict: ACCEPTED
input |
---|
200000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
199982 |
user output |
---|
199982 |
Test 28
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
7987 |
user output |
---|
7987 |
Test 29
Group: 2
Verdict: ACCEPTED
input |
---|
200000 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
3137875 |
user output |
---|
3137875 |
Test 30
Group: 1, 2
Verdict: ACCEPTED
input |
---|
1000 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
4657693 |
user output |
---|
4657693 |
Test 31
Group: 2
Verdict: ACCEPTED
input |
---|
200000 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
1652889357 |
user output |
---|
1652889357 |