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
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
AC × 3
AC × 18
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