제출 #1332546

#제출 시각아이디문제언어결과실행 시간메모리
1332546opeleklanos송신탑 (IOI22_towers)C++20
0 / 100
4117 ms1578952 KiB
#include <set>
#include <vector>
#include <iostream>
using namespace std;

int k = 0;

vector<int> h;
int n;

void init (int n1, vector<int> h1){
    n = n1;
    h = h1;

}

int max_towers(int l, int r, int d){
    vector<set<int>> adj(n, set<int>{});
    for(int i = l; i<r; i++){
        int maxH = h[i+1];
        adj[i].insert(i+1);
        adj[i+1].insert(i);
        for(int j = i+2; j<=r; j++){
            if(h[i] + d > maxH || h[j] + d > maxH){
                adj[i].insert(j);
                adj[j].insert(i);
            }
            maxH = max(maxH, h[j]);
        }
    }

    int ans = 0;
    vector<int> vis(n, 0);
    while(true){
        int minDeg = n+10;
        int m = -1;
        for(int i = 0; i<n; i++){
            if(!vis[i] && adj[i].size()<minDeg){
                m = i;
                minDeg = adj[i].size();
            }
        }
        if(m == -1){
            return ans;
        }
        vis[m] = 1;
        for(auto i : adj[m]){
            vis[i] = 1;
            for(auto j : adj[i]){
                if(j!=m) adj[j].erase(adj[j].find(i));
            }
        }
        ans++;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...