제출 #1176975

#제출 시각아이디문제언어결과실행 시간메모리
117697512345678Split the Attractions (IOI19_split)C++17
0 / 100
570 ms1114112 KiB
#include "split.h"
#include <bits/stdc++.h>

using namespace std;

const int nx=2e5+5;

int sz[nx], c, h[nx], szc[nx], cnt, sm;
vector<pair<int, int>> d[nx], t;
vector<int> res;
pair<int, int> mx;

int dfssz(int u, int p)
{
    sz[u]=1;
    for (auto [v, idx]:d[u]) if (v!=p) sz[u]+=dfssz(v, u);
    return sz[u];
}

void dfsfill(int u, int p, int hd)
{
    h[u]=hd;
    szc[hd]++;
    for (auto [v, idx]:d[u]) if (v!=p) dfsfill(v, u, hd);
}

void fillans(int u, int p, int ans)
{
    if (cnt==0) return;
    res[u]=ans;
    cnt--;
    for (auto [v, idx]:d[u]) if (v!=p&&v!=c&&!res[v]) fillans(v, u, ans);
}

int findcentroid(int u, int p, int rtsz)
{
    for (auto [v, idx]:d[u]) if (v!=p&&2*sz[v]>rtsz) return findcentroid(v, u, rtsz); 
    return u;
}

vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) {
    res.resize(n);
    t.push_back({a, 1});
    t.push_back({b, 2});
    t.push_back({c, 3});
    sort(t.begin(), t.end());
    for (int i=0; i<p.size(); i++) d[p[i]].push_back({q[i], i}), d[q[i]].push_back({p[i], i});
    dfssz(0, 0);
    //for (int i=0; i<n; i++) cout<<"sz "<<i<<' '<<sz[i]<<'\n';
    c=findcentroid(0, 0, n);
    for (auto [v, idx]:d[c]) 
    {
        dfsfill(v, c, v);
        sm+=szc[v];
        mx=max(mx, {szc[v], v});
    }
    if (sm!=n-1) cout<<1/0;
    if (mx.first>=t[0].first)
    {
        cnt=t[0].first;
        fillans(mx.second, c, t[0].second);
        cnt=t[1].first;
        fillans(c, mx.second, t[1].second);
        for (int i=0; i<n;i ++) if (!res[i]) res[i]=t[2].second;
        return res;
    }
    return res;
}

컴파일 시 표준 에러 (stderr) 메시지

split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:57:25: warning: division by zero [-Wdiv-by-zero]
   57 |     if (sm!=n-1) cout<<1/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...