제출 #553144

#제출 시각아이디문제언어결과실행 시간메모리
553144Itamar자매 도시 (APIO20_swap)C++14
50 / 100
445 ms39584 KiB
#include "swap.h" #include <cassert> #include <cstdio> #pragma warning(disable : 4996) #include <map> #include <iostream> using namespace std; #include <vector> #include <queue> #include <set> #include <algorithm> #define ll long long #define vi vector<int> #define vll vector<ll> #define pi pair<int,int> #define pll pair<ll,ll> vi col_v; vector<vector<pi>> his; vector<vi> col; vector<pi> kats; void uni(int i, int j, int t) { if (col_v[i] == col_v[j]) { if (his[i][0].first == -1) { for (int x : col[col_v[i]]) { his[x][0] = { t,-1 }; } } return; } if (col[col_v[i]].size() > col[col_v[j]].size()) swap(i, j); int c = col_v[j]; int c1 = col_v[i]; if (his[i][0].first != -1) { if (his[j][0].first == -1) { for (int x : col[c]) { his[x][0] = { t,-1 }; } } } else if (his[j][0].first != -1) { if (his[i][0].first == -1) { for (int x : col[c1]) { his[x][0] = { t,-1 }; } } } else if (i == kats[c1].first) { if (j == kats[c].second) { kats[c] = { kats[c1].second,kats[c].first }; } else if (j == kats[c].first) { kats[c] = { kats[c1].second,kats[c].second }; } else { for (int x : col[c1]) { his[x][0] = { t,-1 }; } for (int x : col[c]) { his[x][0] = { t,-1 }; } } } else if (i == kats[c1].second) { if (j == kats[c].second) { kats[c] = { kats[c1].first,kats[c].first }; } else if (j == kats[c].first) { kats[c] = { kats[c1].first,kats[c].second }; } else { for (int x : col[c1]) { his[x][0] = { t,-1 }; } for (int x : col[c]) { his[x][0] = { t,-1 }; } } } else { for (int x : col[c1]) { his[x][0] = { t,-1 }; } for (int x : col[c]) { his[x][0] = { t,-1 }; } } for (int x : col[col_v[i]]) { col_v[x] = c; col[col_v[j]].push_back(x); his[x].push_back({ t,c }); } } void init(int N, int M, std::vector<int> U, std::vector<int> V, std::vector<int> W) { col_v.resize(N); his.resize(N); vector<vi> v; for (int i = 0; i < N; i++) { his[i].push_back({ -1,-1 }); his[i].push_back({ 0,i }); kats.push_back( { i, i }); } col.resize(N); for (int i = 0; i < N; i++) { col_v[i] = i; col[i].push_back(i); } for (int i = 0; i < M; i++) { v.push_back({ W[i],V[i],U[i] }); } sort(v.begin(), v.end()); for (vi vec : v) { uni(vec[1], vec[2], vec[0]); } } int getMinimumFuelCapacity(int X, int Y) { vector<pi> v1 = his[X]; vector<pi> v2 = his[Y]; int s = max(v1[0].first, v2[0].first); int it1 = v1.size() - 1; int it2= v2.size() - 1; if (v1[0].first == -1) return -1; vector<vi> vec; for (int i = 1; i <= it1; i++) { vec.push_back({ v1[i].first,v1[i].second,1}); } for (int i = 1; i <= it2; i++) { vec.push_back({ v2[i].first,v2[i].second,2 }); } sort(vec.begin(), vec.end()); int l1=-1, l2=-1; for (int i = 0; i < vec.size(); i++) { int now = vec[i][0]; if (vec[i][2] == 1) { l1 = vec[i][1]; } else { l2 = vec[i][1]; } if (l1 == l2 ) { return max(now,s); } } return -1; }

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

swap.cpp:5: warning: ignoring '#pragma warning ' [-Wunknown-pragmas]
    5 | #pragma warning(disable : 4996)
      | 
swap.cpp: In function 'int getMinimumFuelCapacity(int, int)':
swap.cpp:142:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  142 |     for (int i = 0; i < vec.size(); i++) {
      |                     ~~^~~~~~~~~~~~
#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...