Submission #1267660

#TimeUsernameProblemLanguageResultExecution timeMemory
1267660alexandrosCat Exercise (JOI23_ho_t4)C++20
0 / 100
2095 ms412 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; vector<ll> heights; vector<vector<ll>> connections; vector<ll> obstacles; int main() { ll amount, temp, temp2, score = 0, cat_start; bool gone; scanf("%lld", &amount); heights.resize(amount); obstacles.resize(amount); connections.assign(amount, vector<ll>()); for(int i = 0; i < amount; i++) { obstacles[i] = i; scanf("%lld", &heights[i]); if(heights[i] == amount) cat_start = i; } for(int i = 0; i < amount-1; i++) { scanf("%lld %lld", &temp, &temp2); temp--; temp2--; connections[temp].push_back(temp2); connections[temp2].push_back(temp); } do { vector<bool> blocked(amount, false); int cat_pos = cat_start; ll moves = 0; for (int tower : obstacles) { if (blocked[tower]) continue; blocked[tower] = true; if (tower == cat_pos) { bool all_blocked = true; for (int adj : connections[cat_pos]) { if (!blocked[adj]) { all_blocked = false; break; } } if (all_blocked) break; // cant move // bfs vector<int> dist(amount, -1); queue<int> q; dist[cat_pos] = 0; q.push(cat_pos); while (!q.empty()) { int u = q.front(); q.pop(); for (int v : connections[u]) { if (!blocked[v] && dist[v] == -1) { dist[v] = dist[u] + 1; q.push(v); } } } // find highest reachable tower int next_tower = -1; int max_height = -1; int min_dist = INT_MAX; for (int i = 0; i < amount; i++) { if (i != cat_pos && dist[i] != -1) { if (heights[i] > max_height || (heights[i] == max_height && dist[i] < min_dist)) { max_height = heights[i]; min_dist = dist[i]; next_tower = i; } } } if (next_tower == -1) break; // cant move moves += dist[next_tower]; cat_pos = next_tower; } } score = max(score, moves); } while (next_permutation(obstacles.begin(), obstacles.end())); cout << score << "\n"; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:14:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   14 |     scanf("%lld", &amount);
      |     ~~~~~^~~~~~~~~~~~~~~~~
Main.cpp:21:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |         scanf("%lld", &heights[i]);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~
Main.cpp:26:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   26 |         scanf("%lld %lld", &temp, &temp2);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...