Submission #1168615

#TimeUsernameProblemLanguageResultExecution timeMemory
1168615Br3adCity Mapping (NOI18_citymapping)C++20
9 / 100
90 ms16752 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; struct DSU{ vector<int> parent; DSU(int n){ parent = vector<int>(n+1); iota(all(parent), 0); } int find_parent(int p){ return (parent[p] == p)? p : parent[p] = find_parent(parent[p]); } bool merge(int a, int b){ int pa = find_parent(a); int pb = find_parent(b); if(pa == pb) return false; parent[pa] = pb; return true; } }; // ll get_distance(int x, int y){ // int dis[6][6]; // dis[1][2] = 9; // dis[1][3] = 15; // dis[1][4] = 8; // dis[1][5] = 18; // dis[2][3] = 8; // dis[2][4] = 1; // dis[2][5] = 11; // dis[3][4] = 7; // dis[3][5] = 3; // dis[4][5] = 10; // if(x > y) swap(x, y); // return dis[x][y]; // } void find_roads(int n, int q, int a[], int b[], int w[]){ vector<vector<ll>> dis(n+1, vector<ll>(n+1)); vector<tuple<ll, int, int>> edge; for(int i = 1; i <= n; i++){ for(int j = i+1; j <= n; j++){ dis[i][j] = get_distance(i, j); edge.PB({dis[i][j], i, j}); } } sort(all(edge)); DSU dsu(n); int cnt = 0; for(int i = 0; i < (int)dis.size(); i++){ auto [weight, u, v] = edge[i]; if(dsu.merge(u, v)){ a[cnt] = u; b[cnt] = v; w[cnt] = weight; cnt++; } } } // int main(){ // // ios::sync_with_stdio(false); // cin.tie(NULL); // // // ifstream cin(); // // ofstream cout(); // // const int sz = 5; // int a[sz], b[sz], w[sz]; // find_roads(5, 50000, a, b, w); // // for(int i = 0; i < sz-1; i++){ // cout << a[i] << ' ' << b[i] << ' ' << w[i] << endl; // } // }
#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...