Submission #575184

# Submission time Handle Problem Language Result Execution time Memory
575184 2022-06-09T20:44:39 Z Sam_a17 Stranded Far From Home (BOI22_island) C++14
10 / 100
914 ms 524288 KB
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
//#include "temp.cpp"
#include <cstdio>
using namespace std;

#ifndef ONLINE_JUDGE
#define dbg(x) cerr << #x <<" "; print(x); cerr << endl;
#else
#define dbg(x)
#endif

#define sz(x) (int((x).size()))
#define len(x) (int)x.length()
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define clr(x) (x).clear()
#define uniq(x) x.resize(unique(all(x)) - x.begin());
#define blt __builtin_popcount

#define pb push_back
#define popf pop_front
#define popb pop_back

void print(long long t) {cerr << t;}
void print(int t) {cerr << t;}
void print(string t) {cerr << t;}
void print(char t) {cerr << t;}
void print(double t) {cerr << t;}
void print(long double t) {cerr << t;}
void print(unsigned long long t) {cerr << t;}

template <class T, class V> void print(pair <T, V> p);
template <class T> void print(vector <T> v);
template <class T> void print(set <T> v);
template <class T, class V> void print(map <T, V> v);
template <class T> void print(multiset <T> v);
template <class T, class V> void print(T v[],V n) {cerr << "["; for(int i = 0; i < n; i++) {print(v[i]); cerr << " "; } cerr << "]";}
template <class T, class V> void print(pair <T, V> p) {cerr << "{"; print(p.first); cerr << ","; print(p.second); cerr << "}";}
template <class T> void print(vector <T> v) {cerr << "[ "; for (T i : v) {print(i); cerr << " ";} cerr << "]";}
template <class T> void print(deque<T> v) {cerr << "[ "; for (T i : v) {print(i); cerr << " ";} cerr << "]";}
template <class T> void print(set <T> v) {cerr << "[ "; for (T i : v) {print(i); cerr << " ";} cerr << "]";}
template <class T> void print(multiset <T> v) {cerr << "[ "; for (T i : v) {print(i); cerr << " ";} cerr << "]";}
template <class T, class V> void print(map <T, V> v) {cerr << "[ "; for (auto i : v) {print(i); cerr << " ";} cerr << "]";}

#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
#define nl '\n'

// for grid problems
int dx[8] = {-1,0,1,0,1,-1,1,-1};
int dy[8] = {0,1,0,-1,1,1,-1,-1};

// lowest / (1 << 17) >= 1e5 / (1 << 18) >= 2e5 / (1 << 21) >= 1e6
void fastIO() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr); cout.tie(nullptr);
}
// file in/out
void setIO(string str = "") {
  fastIO();

  if (str != "") {
    freopen((str + ".in").c_str(), "r", stdin);
    freopen((str + ".out").c_str(), "w", stdout);
  }
}
// Indexed Set
template <class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
const int N = 4e5 + 10;
long long n, m, p[N], sz[N], answ[N];
long long value[N];
set<pair<long long, int>> st;
vector<long long> adj[N], comp[N];

long long find(long long a) {
  if(a != p[a]) {
    p[a] = find(p[a]);
  }
  return p[a];
}

long long merge(long long a, long long b) {
  a = find(a), b = find(b);
  if(a == b) {
    return false;
  }
  if(sz(comp[a]) > sz(comp[b])) {
    swap(a, b);
  }

  auto it = st.find({value[b], b});
  if(it != st.end()) {
    st.erase(it);
  }

  it = st.find({value[a], a});
  if(it != st.end()) {
    st.erase(it);
  }

  p[b] = a, sz[a] += sz[b];
  value[a] += value[b];

  st.insert({value[a], a});

  for(auto i: comp[b]) {
    comp[a].push_back(i);
  }
  return true;
}

void solve_() {
  cin >> n >> m;

  vector<pair<long long, int>> A(n + 1);
  vector<long long> B(n + 1);
  for(int i = 1; i <= n; i++) {
    cin >> A[i].first;
    A[i].second = i;
    B[i] = A[i].first;

    p[i] = i, sz[i] = 1;
    value[i] = A[i].first;
    comp[i].push_back(i);

    st.insert({value[i], i});
    answ[i] = 1;
  }

  for(int i = 1; i <= m; i++) {
    int a, b; cin >> a >> b;
    adj[a].push_back(b);
    adj[b].push_back(a);
  }

  sort(all(A));

  for(int i = 1; i <= n; i++) {
    int j = i;
    while(j <= n && A[j].first == A[i].first) {
      for(auto k: adj[A[j].second]) {
        if(B[k] <= A[j].first) {
          merge(k, A[j].second);
        }
      }
      j++;
    }

    if(j > n) {
      break;
    }

    while(!st.empty() && st.begin()->first < A[j].first) {
      long long c = find(st.begin()->second);
      for(auto k: comp[c]) {
        answ[k] = 0;
      }
      st.erase(st.begin());
    }

    i = j - 1;
  }

  for(int i = 1; i <= n; i++) {
    printf("%lld", answ[i]);
  } printf("\n");
}

int main() {
  setIO("");

  auto solve = [&](int test_case)-> void {
    while(test_case--) {
      solve_();
    }
  };

  int test_cases = 1;
  solve(test_cases);

  return 0;
}

Compilation message

island.cpp: In function 'void setIO(std::string)':
island.cpp:64:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   64 |     freopen((str + ".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
island.cpp:65:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   65 |     freopen((str + ".out").c_str(), "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 10 ms 19028 KB Output is correct
2 Correct 9 ms 19028 KB Output is correct
3 Correct 9 ms 19028 KB Output is correct
4 Correct 18 ms 27524 KB Output is correct
5 Correct 18 ms 21844 KB Output is correct
6 Correct 18 ms 25684 KB Output is correct
7 Correct 19 ms 27316 KB Output is correct
8 Correct 16 ms 25684 KB Output is correct
9 Correct 29 ms 39448 KB Output is correct
10 Correct 12 ms 19792 KB Output is correct
11 Correct 12 ms 19732 KB Output is correct
12 Correct 12 ms 19564 KB Output is correct
13 Correct 26 ms 38940 KB Output is correct
14 Correct 16 ms 21764 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 12 ms 19032 KB Output is correct
2 Correct 13 ms 19028 KB Output is correct
3 Runtime error 541 ms 524288 KB Execution killed with signal 9
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 10 ms 19056 KB Output is correct
2 Correct 682 ms 102840 KB Output is correct
3 Correct 673 ms 106548 KB Output is correct
4 Runtime error 565 ms 524288 KB Execution killed with signal 9
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 10 ms 19128 KB Output is correct
2 Runtime error 914 ms 524288 KB Execution killed with signal 9
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 10 ms 19028 KB Output is correct
2 Correct 9 ms 19028 KB Output is correct
3 Correct 9 ms 19028 KB Output is correct
4 Correct 18 ms 27524 KB Output is correct
5 Correct 18 ms 21844 KB Output is correct
6 Correct 18 ms 25684 KB Output is correct
7 Correct 19 ms 27316 KB Output is correct
8 Correct 16 ms 25684 KB Output is correct
9 Correct 29 ms 39448 KB Output is correct
10 Correct 12 ms 19792 KB Output is correct
11 Correct 12 ms 19732 KB Output is correct
12 Correct 12 ms 19564 KB Output is correct
13 Correct 26 ms 38940 KB Output is correct
14 Correct 16 ms 21764 KB Output is correct
15 Correct 12 ms 19032 KB Output is correct
16 Correct 13 ms 19028 KB Output is correct
17 Runtime error 541 ms 524288 KB Execution killed with signal 9
18 Halted 0 ms 0 KB -