답안 #714687

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
714687 2023-03-25T07:54:11 Z Toxtaq Stranded Far From Home (BOI22_island) C++17
0 / 100
1000 ms 37556 KB
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>>g;
vector<int>num;
vector<bool>vis, chosen;
bool cmp(int a, int b){
    return num[a] < num[b];
}
long long cnt = 0;
vector<int>tmp;
void dfs(int u){
    vis[u] = 1;
    vector<int>tempo;
    for(int v : g[u]){
        if(!chosen[v] && cnt >= num[v]){
            cnt += num[v];
            chosen[v] = 1;
            tempo.push_back(v);
        }
        else if(cnt > num[v]){
            tmp.push_back(v);
        }
    }
    for(int v : tempo){
        if(!vis[v]){
            dfs(v);
        }
    }
}
int main()
{
    int n, m;
    cin >> n >> m;
    g.resize(n + 1);
    num.resize(n + 1);
    vis.resize(n + 1);
    chosen.resize(n + 1);
    for(int i = 1;i <= n;++i)cin >> num[i];
    for(int i = 0;i < m;++i){
        int u, v;
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    for(int i = 1;i <= n;++i){
        sort(g[i].begin(), g[i].end(), cmp);
    }
//    for(int i = 1;i <= n;++i){
//        cout << i << ": ";
//        for(int j : g[i]){
//            cout << j << " ";
//        }
//        cout << '\n';
//    }
    string s = "";
    for(int i = 1;i <= n;++i){
        cnt = num[i];
        chosen[i] = 1;
        dfs(i);
        sort(tmp.begin(), tmp.end(), cmp);
        int ind = 0;
        while(tmp.size() && ind < tmp.size()){
            int j = tmp[ind], sz = tmp.size();
            if(!chosen[j] && cnt >= num[j]){
                dfs(j);
            }
            else{
                ind++;
                continue;
            }
            if(tmp.size() == sz)break;
            sort(tmp.begin(), tmp.end(), cmp);
            ind = 0;
        }
        bool ok = 1;
        for(int j = 1;j <= n && ok;++j){
            if(!vis[j]){
                ok = 0;
            }
        }
        for(int j = 1;j <= n;++j){
            vis[j] = 0;
            chosen[j] = 0;
        }
        if(ok)s += '1';
        else s += '0';
        tmp.clear();
    }
    cout << s;
}

Compilation message

island.cpp: In function 'int main()':
island.cpp:62:33: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |         while(tmp.size() && ind < tmp.size()){
      |                             ~~~~^~~~~~~~~~~~
island.cpp:71:27: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   71 |             if(tmp.size() == sz)break;
      |                ~~~~~~~~~~~^~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Incorrect 304 ms 476 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Execution timed out 1076 ms 23092 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Execution timed out 1068 ms 37556 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Execution timed out 1069 ms 14740 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Incorrect 304 ms 476 KB Output isn't correct
5 Halted 0 ms 0 KB -