Submission #1168717

#TimeUsernameProblemLanguageResultExecution timeMemory
1168717Br3adCity Mapping (NOI18_citymapping)C++20
22 / 100
270 ms676 KiB
#include <iostream> #include <fstream> #include <iomanip> #include <algorithm> #include <functional> #include <numeric> #include <cstring> #include <string> #include <cmath> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include "citymapping.h" using namespace std; #define ll long long #define ull unsigned long long #define f first #define s second #define PF push_front #define PB push_back #define MP make_pair #define all(v) v.begin(), v.end() #define rall(v) v.rbegin(), v.rend() #define max(a, b) ((a > b)? a : b) #define min(a, b) ((a < b)? a : b) #define max3(a, b, c) max(max(a, b), c) #define min3(a, b, c) min(min(a, b), c) const int N = 1e3 + 5; const int M = 1e9 + 7; const int inf = 0x3f3f3f3f; const ll int INF = 1e18; vector<vector<pair<int, int>>> adj(1005, vector<pair<int, int>>()); vector<int> sz(1005); vector<bool> block(1005, false); void get_sz(int cur){ sz[cur] = 1; for(auto [child, _] : adj[cur]){ if(block[child]) continue; get_sz(child); sz[cur] += sz[child]; } } void find_roads(int n, int q, int a[], int b[], int w[]){ vector<pair<ll, int>> dis; vector<ll> dis_to(n+1); for(int i = 2; i <= n; i++){ ll temp = get_distance(1, i); dis.PB(MP(temp, i)); dis_to[i] = temp; } sort(all(dis)); adj[1].PB(MP(dis[0].s, dis[0].f)); for(int i = 1; i < n-1; i++){ for(int j = 1; j <= n; j++) block[j] = false; int root = 1; int cur = dis[i].s; while(true){ for(int j = 1; j <= n; j++) sz[j] = 0; get_sz(root); if(sz[root] == 1) break; int mid = root; for(int j = 1; j <= n; j++) if(sz[j] > 0){ int dif = abs(sz[j] - (sz[root]/2)); if(dif < abs(sz[mid] - (sz[root]/2))){ mid = j; } } int dist = get_distance(cur, mid); if(dis_to[mid] + dist == dis_to[cur]){ // Correct subtree root = mid; }else { // Prune subtree block[mid] = true; } } adj[root].PB(MP(cur, dis_to[cur] - dis_to[root])); } int cnt = 0; for(int i = 1; i <= n; i++){ for(auto [child, weight] : adj[i]){ a[cnt] = i; b[cnt] = child; w[cnt] = weight; cnt++; } } }
#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...