답안 #722605

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
722605 2023-04-12T12:24:46 Z Itamar Stranded Far From Home (BOI22_island) C++14
10 / 100
563 ms 60692 KB
// ConsoleApplication134.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
using namespace std;
#include <vector>
#define vi vector<int>
#define pi pair<int,int>
#define ll long long
#include <algorithm>
#include <queue>
#define pll pair<ll,ll>
const int siz = 2e5;
bool ans[siz];
ll cit[siz];
vi fr[siz];
int up[siz];
#include <set>
vector<pll> ord;

int my[siz];
vi col[siz];
ll sum[siz];
set<pll> out[siz];

int num[siz];
void uni(int i, int j) {
    i = my[i], j = my[j];
    if (i == j)return;
    if (out[j].size() > out[i].size())swap(out[i], out[j]);
    if (col[i].size() < col[j].size())swap(col[i], col[j]);
    sum[i] += sum[j];
    for (pll p : out[j]) {
        out[i].insert(p);
    }
    for (int v : col[j]) {
        col[i].push_back(v);
        my[v] = i;
    }
}

int main()
{
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        cin >> cit[i];
        ord.push_back({ cit[i],-i });
    }
    for (int i = 0; i < m; i++) {
        int a, b;
        cin >> a >> b;
        a--, b--;
        fr[a].push_back(b);
        fr[b].push_back(a);
    }
    sort(ord.begin(), ord.end());
    ans[-ord[n - 1].second] = 1;
    for (int i = 0; i < n; i++) {
        ord[i].second = -ord[i].second;
        num[ord[i].second] = i;
    }
    for (int i = 0; i < n; i++) {
        my[i] = i;
        col[i].push_back(i);
        sum[i] = cit[i];
        
        for (int f : fr[i]) {
            if ( num[f]>num[i]) {
                out[i].insert({ cit[f],f });
            }
        }
    }                
    for (int i = 0; i < n; i++)up[i] = -1;
    for (int i = 0; i < n-1; i++) {
        int j = ord[i].second;
        for (int f : fr[j]) {
            if (out[my[f]].find({ cit[j],j }) != out[my[f]].end()) {
                out[my[f]].erase({ cit[j],j });
            }
        }
        for (int f : fr[j]) {
            if (num[f] < i) {
                uni(j, f);
            }
        }
        if (!out[my[j]].empty()) {
            pll p = *out[my[j]].begin();
            if (p.first <= sum[my[j]]) {
                up[j] = p.second;
            }
        }
    }
    for (int i = n - 2; i >= 0; i--) {
        if (up[ord[i].second] != -1) {
            ans[ord[i].second] = ans[up[ord[i].second]];
        }
    }
    for (int i = 0; i < n; i++)if (ans[i])cout << '1'; else cout << '0';
}

// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu

// Tips for Getting Started: 
//   1. Use the Solution Explorer window to add/manage files
//   2. Use the Team Explorer window to connect to source control
//   3. Use the Output window to see build output and other messages
//   4. Use the Error List window to view errors
//   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
//   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 19028 KB Output is correct
2 Correct 11 ms 19004 KB Output is correct
3 Correct 10 ms 19028 KB Output is correct
4 Incorrect 12 ms 19412 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 19028 KB Output is correct
2 Correct 10 ms 19028 KB Output is correct
3 Correct 403 ms 54984 KB Output is correct
4 Correct 326 ms 54968 KB Output is correct
5 Correct 513 ms 57656 KB Output is correct
6 Correct 547 ms 58812 KB Output is correct
7 Correct 505 ms 58904 KB Output is correct
8 Correct 481 ms 58016 KB Output is correct
9 Correct 435 ms 60692 KB Output is correct
10 Correct 287 ms 53808 KB Output is correct
11 Correct 267 ms 53936 KB Output is correct
12 Correct 508 ms 58140 KB Output is correct
13 Correct 325 ms 55028 KB Output is correct
14 Correct 412 ms 54976 KB Output is correct
15 Correct 350 ms 54960 KB Output is correct
16 Correct 253 ms 54656 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 19068 KB Output is correct
2 Incorrect 528 ms 53176 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 19028 KB Output is correct
2 Incorrect 563 ms 53204 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 19028 KB Output is correct
2 Correct 11 ms 19004 KB Output is correct
3 Correct 10 ms 19028 KB Output is correct
4 Incorrect 12 ms 19412 KB Output isn't correct
5 Halted 0 ms 0 KB -