Submission #1341361

#TimeUsernameProblemLanguageResultExecution timeMemory
1341361garam1732Comparing Plants (IOI20_plants)C++20
11 / 100
4098 ms126204 KiB
#include "plants.h"
#include <bits/stdc++.h>
using namespace std;

#define ff first
#define ss second
#define bl ' '
#define endl '\n'
#define all(v) (v).begin(), (v).end()
#define comp(v) (v).erase(unique(all(v)), (v).end())
#define lbd(v,x) lower_bound(all(v), (x))-(v).begin()
#define ubd(v,x) upper_bound(all(v), (x))-(v).begin()
#define sz(v) ((int)(v).size())

typedef long long ll;
typedef pair<int, int> pi;
typedef pair<pi, int> pii;
typedef pair<int, pi> ipi;
typedef pair<pi, pi> pipi;
typedef pair<ll, ll> pll;

const int MAXN = 100100*2;
const ll MOD = 1e9+7;
const ll INF = 2e9;

vector<int> adj[MAXN];
int lev[MAXN], n;
void init(int k, std::vector<int> r) {
    n = r.size(); int cnt=0;
    vector<int> v={};
    while(1) {
        for(int i=0;i<n;i++) {
            if(lev[i]>0) continue;
            if(r[i]>0) continue;

            bool flag=1;
            for(int j=(i+n-1)%n,t=1;t<k;t++, j=(j+n-1)%n) {
                if(lev[j]>0) continue;
                if(r[j]==0) {
                    flag=0; break;
                }
            }

            if(flag) v.push_back(i);
        }
        
        if(v.empty()) break;

        cnt++;
        for(int x:v) {
            lev[x] = cnt;
            for(int j=(x+n-1)%n,t=1;t<k;t++,j=(j+n-1)%n) if(lev[j]==0) r[j]--;
        } v.clear();
    }

    for(int i=0;i<n;i++) {//cout<<lev[i]<<bl;
        for(int j=(i+1)%n,t=1;t<k;t++,j=(j+1)%n) {
            if(lev[i] < lev[j]) adj[i].push_back(j);
            else if(lev[i]>lev[j]) adj[j].push_back(i);
        }
    }//cout<<endl;
}

bool vst[MAXN];
bool dfs(int x, int y) {
    vst[x]=1;

    if(x==y) return 1;
    for(int nx:adj[x]) {
        if(vst[nx]) continue;
        if(dfs(nx,y)) return 1;
    } return 0;
}

int compare_plants(int x, int y) {
	if(lev[x] == lev[y]) return 0;

    int res=1;
    if(lev[x] > lev[y]) swap(x,y),res=-1;
    for(int i=0;i<n;i++) vst[i]=0;
    if(!dfs(x,y)) res=0;
    return res;
}
#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...