Submission #1235136

#TimeUsernameProblemLanguageResultExecution timeMemory
1235136alexaaa봉쇄 시간 (IOI23_closing)C++20
0 / 100
59 ms17984 KiB
#include <iostream> #include <vector> #include <queue> #include <climits> using namespace std; struct Data{ int n; int convenience_score = 2; vector<vector<pair<int, int>>> adj_list; long long t_w = 0; long long closing_time_sum = 0; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> queue; vector<int> closing_time; }; void traversal(vector<int> &cl_time, long long &cl_sum, long long K, long long total_weight, vector<vector<pair<int, int>>> &adj_list, int &convenience_score, int city, int prev_city, int other_city) { priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> queue; int prev = city; if (adj_list[city].empty()) { return; } for (auto u : adj_list[city]) { queue.push(u); } while (!queue.empty()) { pair<int, int> v = queue.top(); queue.pop(); if (v.second == other_city) { return; } if (v.second == prev_city) { continue; } long long new_weight = total_weight + v.first; cl_sum += new_weight; if (cl_sum <= K && cl_time[v.second] == 0) { cl_time[v.second] = v.first; convenience_score++; traversal(cl_time, cl_sum, K, new_weight, adj_list, convenience_score, v.second, prev, other_city); } else { cl_sum -= new_weight; if (cl_time[v.second]) { if (new_weight <= cl_time[v.second]) { convenience_score++; } else { int surplus = v.first - cl_time[v.second]; cl_sum += surplus; cl_time[v.second] = v.first; convenience_score++; } } } } } int max_score(int N, int X, int Y, long long K, vector<int> U, vector<int> V, vector<int> W){ Data data; data.adj_list.resize(N); data.closing_time.resize(N); for (int i = 0; i < N; i++){ data.adj_list[U[i]].push_back({W[i], V[i]}); data.adj_list[V[i]].push_back({W[i], U[i]}); } if (X != Y){ traversal(data.closing_time, data.closing_time_sum, K, data.t_w, data.adj_list, data.convenience_score, X, X, Y); traversal(data.closing_time,data.closing_time_sum, K, data.t_w, data.adj_list, data.convenience_score, Y, Y, X); } else if (X == Y){ data.convenience_score -= 1; traversal(data.closing_time,data.closing_time_sum, K, data.t_w, data.adj_list, data.convenience_score, X, X, Y); } return data.convenience_score; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...