Submission #2546091


Source Code Expand

#include <algorithm>
#include <cstring>
#include <deque>
#include <functional>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <vector>
using namespace std;
using ll = long long;

struct UnionFind {
  vector<int> parent;  // parent[root] is the negative of the size.
  UnionFind(int n) : parent(n, -1){};
  bool unite(int u, int v) {
    u = root(u);
    v = root(v);
    if (u == v) return false;
    if (parent[u] > parent[v]) swap(u, v);
    parent[u] += parent[v];
    parent[v] = u;
    return true;
  }
  bool find(int u, int v) { return root(u) == root(v); }
  int root(int u) { return parent[u] < 0 ? u : parent[u] = root(parent[u]); }
  int size(int u) { return -parent[root(u)]; }
};

struct Edge {
  int a, b, y;
};

struct Query {
  int i, v, w;
};

int main() {
  int N, M;
  while (cin >> N >> M) {
    vector<Edge> edges;
    for (int i = 0; i < M; i++) {
      int a, b, y;
      cin >> a >> b >> y;
      --a;
      --b;
      edges.push_back(Edge{a, b, y});
    }
    sort(edges.begin(), edges.end(),
         [&](auto &a, auto &b) { return a.y > b.y; });
    int Q;
    cin >> Q;
    vector<Query> queries;
    for (int i = 0; i < Q; i++) {
      int v, w;
      cin >> v >> w;
      --v;
      queries.push_back(Query{i, v, w});
    }
    sort(queries.begin(), queries.end(),
         [&](auto &a, auto &b) { return a.w > b.w; });
    vector<int> res(Q);
    UnionFind uf(N);
    int i = 0;
    for (auto &q : queries) {
      while (i < M && edges[i].y > q.w) {
        uf.unite(edges[i].a, edges[i].b);
        ++i;
      }
      res[q.i] = uf.size(q.v);
    }
    for (int x : res) cout << x << endl;
  }
  return 0;
}

Submission Info

Submission Time
Task D - 道路の老朽化対策について
User kroton
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1765 Byte
Status AC
Exec Time 418 ms
Memory 6384 KB

Judge Result

Set Name Sample Subtask1 All
Score / Max Score 0 / 0 50 / 50 50 / 50
Status
AC × 3
AC × 10
AC × 22
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
Subtask1 sample_01.txt, sample_02.txt, sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt
All sample_01.txt, sample_02.txt, sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 256 KB
sample_02.txt AC 1 ms 256 KB
sample_03.txt AC 1 ms 256 KB
subtask1_01.txt AC 4 ms 256 KB
subtask1_02.txt AC 5 ms 256 KB
subtask1_03.txt AC 5 ms 256 KB
subtask1_04.txt AC 4 ms 256 KB
subtask1_05.txt AC 4 ms 256 KB
subtask1_06.txt AC 5 ms 256 KB
subtask1_07.txt AC 5 ms 256 KB
subtask2_01.txt AC 378 ms 6384 KB
subtask2_02.txt AC 385 ms 5744 KB
subtask2_03.txt AC 395 ms 5744 KB
subtask2_04.txt AC 401 ms 5744 KB
subtask2_05.txt AC 285 ms 3700 KB
subtask2_06.txt AC 355 ms 6384 KB
subtask2_07.txt AC 374 ms 5872 KB
subtask2_08.txt AC 381 ms 5872 KB
subtask2_09.txt AC 404 ms 6000 KB
subtask2_10.txt AC 405 ms 5744 KB
subtask2_11.txt AC 418 ms 5616 KB
subtask2_12.txt AC 397 ms 5488 KB