제출 #904104

#제출 시각아이디문제언어결과실행 시간메모리
904104vjudge1Odašiljači (COCI20_odasiljaci)C++17
70 / 70
192 ms35004 KiB
#include <bits/stdc++.h> using namespace std; typedef long double ld; struct Dsu { vector<int> parent, rank, size; Dsu(int N) { parent.resize(N); rank.resize(N); size.resize(N, 1); for (int i = 0; i < N; i++){ parent[i] = i; } } bool isSameSet(int i, int j){ return findSet(i) == findSet(j); } int findSet(int i) { if(parent[i] == i){ return i; }else{ return parent[i] = findSet(parent[i]); } } void unionSet(int i, int j){ int x = findSet(i); int y = findSet(j); if (x != y){ if (rank[x] > rank[y]){ parent[y] = x; size[x] += size[y]; }else if(rank[x] < rank[y]){ parent[x] = y; size[y] += size[x]; }else{ parent[x] = y; size[y] += size[x]; rank[y]++; } } } int getSize(int i){ return size[findSet(i)]; } }; int main(){ int n; cin >> n; pair<long double, long double> ubicaciones[n]; long double x,y; for (int i = 0; i<n; i++){ cin >> x >> y; ubicaciones[i].first = x; ubicaciones[i].second = y; } vector<pair< long double,pair<int,int>>> edges; for (int i = 0; i<n; i++){ for(int j = 0; j<n; j++){ if(i == j) continue; ld dx = ubicaciones[i].first - ubicaciones[j].first; ld dy = ubicaciones[i].second - ubicaciones[j].second; long double distancia = sqrt(dx * dx + dy * dy); edges.push_back({distancia,{i,j}}); } } sort(edges.begin(), edges.end()); Dsu dsu(n); // Kruskal long double costo_total = 0; for(int i = 0; i < edges.size(); i++){ ld w = edges[i].first; int a = edges[i].second.first; int b = edges[i].second.second; if(!dsu.isSameSet(a, b)){ // Si a y b no estan en la misma componente conexa dsu.unionSet(a, b); // entonces las uno costo_total = w; } } costo_total /= 2.0L; cout << fixed<< setprecision(7) << costo_total << endl; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

odasiljaci.cpp: In function 'int main()':
odasiljaci.cpp:81:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long double, std::pair<int, int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |     for(int i = 0; i < edges.size(); i++){
      |                    ~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...