Submission #1354832

#TimeUsernameProblemLanguageResultExecution timeMemory
1354832Francisco_MartinPPP (EGOI23_ppp)C++20
100 / 100
284 ms41400 KiB
//EGOI 2023 Padel Prize Pursuit
//https://qoj.ac/contest/1354/problem/7155

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;
const ll MAXN = 2e5+5;

vll g[MAXN], freq(MAXN,0), ans(MAXN,0); 
vector<bool> vis(MAXN,false); set<pair<ll,ll>> C;
void update(ll pos,ll x){
    C.erase({freq[pos],-pos});
    freq[pos]+=x; C.insert({freq[pos],-pos});
}
void dfs(ll v,vll &A){
    vis[v]=true; ans[-prev(C.end())->second]++;
    for(auto u:g[v]){
        update(A[u],v-u); dfs(u,A); update(A[u],u-v);
    }
}

int main(){
    ll n, m;
    cin >> n >> m;
    vll A(m), B(m), pst(n,-1);
    for(int i=0; i<m; i++){
        cin >> A[i] >> B[i];
        if(pst[A[i]]!=-1) g[i].push_back(pst[A[i]]);
        if(pst[B[i]]!=-1) g[i].push_back(pst[B[i]]);
        pst[A[i]]=i; pst[B[i]]=-1;
    }
    for(int i=m-1; i>=0; i--) if(!vis[i]){
        update(A[i],m-i); dfs(i,A); update(A[i],i-m);
    }
    for(int i=0; i<n; i++) cout << ans[i] << " ";
    cout << "\n"; return 0;
}
#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...