提出 #66607237
ソースコード 拡げる
#include <bits/stdc++.h>
using namespace std;
#define int long long
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
/*
*/
struct DSU {
int n, components;
vector<int> parent, size;
// Initialize DSU with n elements (1-indexed or 0-indexed as needed)
DSU(int _n) : n(_n), components(_n), parent(n+1), size(n+1, 1) {
iota(parent.begin(), parent.end(), 0);
}
// Find with path compression
int find(int x) {
if (parent[x] != x)
parent[x] = find(parent[x]);
return parent[x];
}
// Union by size; returns true if merged, false if already in same set
bool unite(int a, int b) {
a = find(a);
b = find(b);
if (a == b) return false;
// Ensure the larger set remains root
if (size[a] < size[b])
swap(a, b);
parent[b] = a;
size[a] += size[b];
components--;
return true;
}
// Check if two elements are in the same set
bool same(int a, int b) {
return find(a) == find(b);
}
// Get size of the set containing x
int get_size(int x) {
return size[find(x)];
}
};
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n, q;
cin >> n >> q;
DSU dsu(n + q + 1);
priority_queue<array<int, 3>, vector<array<int, 3>>, greater<array<int, 3>>> s;
vector<pair<int, int>> in(n);
vector<map<int, vector<int>>> has(n + q + 1);
for(int i = 0; i < n; i++) {
cin >> in[i].first >> in[i].second;
}
for(int i = 0; i < n; i++) {
for(int j = i + 1; j < n; j++) {
int dis = abs(in[i].first - in[j].first) + abs(in[i].second - in[j].second);
s.push({dis, i, j});
has[i][dis].push_back(j);
}
}
int c = 0;
while(q--) {
c++;
int t;
cin >> t;
if(t == 1) {
int a, b;
cin >> a >> b;
in.push_back({a, b});
for(int i = 0; i < n; i++) {
int dis = abs(in[i].first - a) + abs(in[i].second - b);
s.push({dis, i, n});
has[i][dis].push_back(n);
}
n++;
} else if(t == 2) {
int extra = has.size() - n;
if(dsu.components - extra == 1) {
cout << -1 << '\n';
continue;
}
int opt;
while(s.size()) {
auto [d, u, v] = s.top();
int pu = dsu.find(u), pv = dsu.find(v);
s.pop();
if(pu != pv) {
dsu.unite(u, v);
opt = d;
break;
}
}
while(s.size() && s.top()[0] == opt) {
auto [d, u, v] = s.top();
s.pop();
dsu.unite(u, v);
}
cout << opt << '\n';
} else {
int u, v;
cin >> u >> v;
u--, v--;
int pu = dsu.find(u), pv = dsu.find(v);
cout << (pu == pv ? "Yes" : "No") << '\n';
}
}
}
提出情報
コンパイルエラー
In file included from /usr/include/c++/12/istream:39,
from /usr/include/c++/12/sstream:38,
from /usr/include/c++/12/complex:45,
from /usr/include/c++/12/ccomplex:39,
from /usr/include/x86_64-linux-gnu/c++/12/bits/stdc++.h:54,
from Main.cpp:1:
In member function ‘std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long long int) [with _CharT = char; _Traits = std::char_traits<char>]’,
inlined from ‘int main()’ at Main.cpp:107:21:
/usr/include/c++/12/ostream:202:25: warning: ‘opt’ may be used uninitialized [-Wmaybe-uninitialized]
202 | { return _M_insert(__n); }
| ~~~~~~~~~^~~~~
Main.cpp: In function ‘int main()’:
Main.cpp:91:17: note: ‘opt’ was declared here
91 | int opt;
| ^~~
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
0 / 500 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
00_sample_00.txt |
| All |
00_sample_00.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt, 01_test_37.txt, 01_test_38.txt, 01_test_39.txt, 01_test_40.txt, 01_test_41.txt, 01_test_42.txt, 01_test_43.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 00_sample_00.txt |
AC |
1 ms |
3452 KiB |
| 01_test_00.txt |
AC |
266 ms |
130072 KiB |
| 01_test_01.txt |
AC |
271 ms |
129212 KiB |
| 01_test_02.txt |
TLE |
2230 ms |
320288 KiB |
| 01_test_03.txt |
AC |
277 ms |
129136 KiB |
| 01_test_04.txt |
AC |
1415 ms |
245248 KiB |
| 01_test_05.txt |
AC |
1392 ms |
244644 KiB |
| 01_test_06.txt |
AC |
957 ms |
186424 KiB |
| 01_test_07.txt |
AC |
278 ms |
129336 KiB |
| 01_test_08.txt |
AC |
1022 ms |
189096 KiB |
| 01_test_09.txt |
AC |
802 ms |
169444 KiB |
| 01_test_10.txt |
AC |
773 ms |
167360 KiB |
| 01_test_11.txt |
AC |
1513 ms |
244944 KiB |
| 01_test_12.txt |
AC |
326 ms |
166988 KiB |
| 01_test_13.txt |
AC |
332 ms |
167088 KiB |
| 01_test_14.txt |
TLE |
2237 ms |
407736 KiB |
| 01_test_15.txt |
AC |
330 ms |
167164 KiB |
| 01_test_16.txt |
AC |
1776 ms |
333776 KiB |
| 01_test_17.txt |
AC |
1856 ms |
336808 KiB |
| 01_test_18.txt |
AC |
1182 ms |
268420 KiB |
| 01_test_19.txt |
AC |
328 ms |
166988 KiB |
| 01_test_20.txt |
AC |
1158 ms |
269212 KiB |
| 01_test_21.txt |
AC |
812 ms |
227564 KiB |
| 01_test_22.txt |
AC |
935 ms |
243256 KiB |
| 01_test_23.txt |
AC |
1653 ms |
336164 KiB |
| 01_test_24.txt |
AC |
245 ms |
63888 KiB |
| 01_test_25.txt |
AC |
222 ms |
65652 KiB |
| 01_test_26.txt |
AC |
320 ms |
81256 KiB |
| 01_test_27.txt |
AC |
493 ms |
106212 KiB |
| 01_test_28.txt |
AC |
221 ms |
65672 KiB |
| 01_test_29.txt |
AC |
381 ms |
83412 KiB |
| 01_test_30.txt |
AC |
838 ms |
136744 KiB |
| 01_test_31.txt |
AC |
975 ms |
207436 KiB |
| 01_test_32.txt |
AC |
311 ms |
80996 KiB |
| 01_test_33.txt |
AC |
864 ms |
135628 KiB |
| 01_test_34.txt |
AC |
1020 ms |
222520 KiB |
| 01_test_35.txt |
AC |
1156 ms |
260624 KiB |
| 01_test_36.txt |
AC |
531 ms |
104404 KiB |
| 01_test_37.txt |
AC |
1002 ms |
212696 KiB |
| 01_test_38.txt |
AC |
1189 ms |
259064 KiB |
| 01_test_39.txt |
AC |
1162 ms |
259176 KiB |
| 01_test_40.txt |
AC |
1917 ms |
339520 KiB |
| 01_test_41.txt |
AC |
1247 ms |
268916 KiB |
| 01_test_42.txt |
TLE |
2237 ms |
418388 KiB |
| 01_test_43.txt |
AC |
1 ms |
3516 KiB |