Submission #36443656
Source Code Expand
#include <bits/stdc++.h>
#define M_PI 3.14159265358979323846
typedef long long ll;
const int INF = 1e9;
const int MOD = 1e9 + 7;
const ll LINF = 1e18;
using namespace std;
// Union-Find
struct UnionFind {
vector<int> par, rank, siz;
// 構造体の初期化
UnionFind(int n) : par(n, -1), rank(n, 0), siz(n, 1) { }
// 根を求める
int root(int x) {
if (par[x] == -1) return x; // x が根の場合は x を返す
else return par[x] = root(par[x]); // 経路圧縮
}
// x と y が同じグループに属するか (= 根が一致するか)
bool issame(int x, int y) {
return root(x) == root(y);
}
// x を含むグループと y を含むグループを併合する
bool unite(int x, int y) {
int rx = root(x), ry = root(y); // x 側と y 側の根を取得する
if (rx == ry) return false; // すでに同じグループのときは何もしない
// union by rank
if (rank[rx] < rank[ry]) swap(rx, ry); // ry 側の rank が小さくなるようにする
par[ry] = rx; // ry を rx の子とする
if (rank[rx] == rank[ry]) rank[rx]++; // rx 側の rank を調整する
siz[rx] += siz[ry]; // rx 側の siz を調整する
return true;
}
// x を含む根付き木のサイズを求める
int size(int x) {
return siz[root(x)];
}
};
int main() {
int N;
cin >> N;
UnionFind tree(10+N);
vector<pair<int, int>>rudder(N);
vector<int> kari;
map<int, int>assyuku;
kari.push_back(1);
for (int i = 0; i < N; i++) {
int a, b;
cin >> a >> b;
rudder[i] = make_pair(a, b);
kari.push_back(a);
kari.push_back(b);
}
sort(kari.begin(), kari.end());
kari.erase(unique(kari.begin(), kari.end()), kari.end());
vector<int>A(kari.size() + 1);
for (int i = 0; i < kari.size(); i++) {
assyuku[kari[i]] =i ;
//A[i + 1] = kari[i];
// cout << kari[i] << endl;
}
for (int i = 0; i < N; i++) {
tree.unite(assyuku[rudder[i].first], assyuku[rudder[i].second]);
}
int ans = 0;
for (int i = 1; i <N+1;i++) {
if (tree.issame(0, i)) {
ans = max(i, ans);
}
}
cout << kari[ans] << endl;
return 0;
}
Submission Info
Submission Time
2022-11-12 22:23:24+0900
Task
C - Ladder Takahashi
User
amaoto
Language
C++ (GCC 9.2.1)
Score
300
Code Size
2428 Byte
Status
AC
Exec Time
358 ms
Memory
18576 KiB
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:66:23: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
66 | for (int i = 0; i < kari.size(); i++) {
| ~~^~~~~~~~~~~~~
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
300 / 300
Status
Set Name
Test Cases
Sample
example0.txt, example1.txt, example2.txt
All
example0.txt, example1.txt, example2.txt, handmade0.txt, handmade1.txt, handmade2.txt, killer0.txt, killer1.txt, killer2.txt, killer3.txt, killer4.txt, killer5.txt, killer6.txt, random0.txt, random1.txt, random2.txt, random3.txt, random4.txt
Case Name
Status
Exec Time
Memory
example0.txt
AC
9 ms
3424 KiB
example1.txt
AC
2 ms
3600 KiB
example2.txt
AC
2 ms
3476 KiB
handmade0.txt
AC
2 ms
3552 KiB
handmade1.txt
AC
2 ms
3432 KiB
handmade2.txt
AC
3 ms
3500 KiB
killer0.txt
AC
358 ms
18576 KiB
killer1.txt
AC
208 ms
13320 KiB
killer2.txt
AC
165 ms
11160 KiB
killer3.txt
AC
251 ms
15168 KiB
killer4.txt
AC
205 ms
14164 KiB
killer5.txt
AC
264 ms
16868 KiB
killer6.txt
AC
145 ms
8960 KiB
random0.txt
AC
261 ms
13244 KiB
random1.txt
AC
175 ms
10424 KiB
random2.txt
AC
226 ms
12356 KiB
random3.txt
AC
147 ms
9536 KiB
random4.txt
AC
270 ms
13692 KiB