Submission #143369

# Submission time Handle Problem Language Result Execution time Memory
143369 2019-08-13T21:14:08 Z Bench0310 Split the Attractions (IOI19_split) C++14
40 / 100
292 ms 23032 KB
#include <bits/stdc++.h>

using namespace std;

int n;
int centroid;
const int N=100000;
vector<int> v[N];
vector<int> g[N];
vector<int> z[N];
vector<int> d;
vector<int> sub(N,0);
vector<int> id(N);
vector<bool> vis(N,0);
vector<int> res;

void dfs1(int a)
{
    sub[a]=1;
    for(int to:v[a])
    {
        if(sub[to]!=0) continue;
        g[a].push_back(to);
        g[to].push_back(a);
        dfs1(to);
        sub[a]+=sub[to];
    }
}

int get_centroid(int a,int p=-1)
{
    for(int to:g[a])
    {
        if(to!=p&&sub[to]>n/2) return get_centroid(to,a);
    }
    return a;
}

void dfs2(int a,int now)
{
    sub[a]=1;
    id[a]=now;
    for(int to:g[a])
    {
        if(sub[to]!=0) continue;
        if(now==-1) d.push_back(to);
        dfs2(to,(now!=-1?now:to));
        sub[a]+=sub[to];
    }
}

void solve_one(vector<int> src,int num,int t)
{
    vector<bool> pos(n,0);
    for(int a:src) pos[a]=1;
    queue<int> q;
    q.push(src[0]);
    while(num>0)
    {
        int e=q.front();
        q.pop();
        res[e]=t;
        num--;
        for(int to:v[e]) if(to!=centroid&&pos[id[to]]==1&&res[to]==0) q.push(to);
    }
}

void solve_two(int num,int t)
{
    queue<int> q;
    q.push(centroid);
    while(num>0)
    {
        int e=q.front();
        q.pop();
        res[e]=t;
        num--;
        for(int to:g[e]) if(res[to]==0) q.push(to);
    }
}

void solve_three(int t)
{
    for(int i=0;i<n;i++) if(res[i]==0) res[i]=t;
}

vector<int> component(int src,int a)
{
    vector<int> comp;
    int cnt=0;
    vis[src]=1;
    queue<int> q;
    q.push(src);
    while(!q.empty())
    {
        int e=q.front();
        q.pop();
        cnt+=sub[e];
        comp.push_back(e);
        if(cnt>=a) break;
        for(int to:z[e])
        {
            if(vis[to]) continue;
            vis[to]=1;
            q.push(to);
        }
    }
    if(cnt>=a) return comp;
    else return {-1};
}

vector<int> find_split(int _n,int a,int b,int c,vector<int> ca,vector<int> cb)
{
    n=_n;
    res.resize(n,0);
    int m=ca.size();
    for(int i=0;i<m;i++)
    {
        v[ca[i]].push_back(cb[i]);
        v[cb[i]].push_back(ca[i]);
    }
    dfs1(0);
    centroid=get_centroid(0);
    for(int i=0;i<n;i++) sub[i]=0;
    dfs2(centroid,-1);
    vector<pair<int,int>> abc={{a,1},{b,2},{c,3}};
    sort(abc.begin(),abc.end());
    for(int i=0;i<m;i++)
    {
        if(ca[i]==centroid||cb[i]==centroid) continue;
        if(id[ca[i]]!=id[cb[i]])
        {
            z[id[ca[i]]].push_back(id[cb[i]]);
            z[id[cb[i]]].push_back(id[ca[i]]);
        }
    }
    for(int to:d)
    {
        if(vis[to]) continue;
        vector<int> comp=component(to,abc[0].first);
        if(comp[0]==-1) continue;
        solve_one(comp,abc[0].first,abc[0].second);
        solve_two(abc[1].first,abc[1].second);
        solve_three(abc[2].second);
        return res;
    }
    return res;
}

/*int main()
{
    vector<int> temp=find_split(9, 4, 2, 3, {0, 0, 0, 0, 0, 0, 1, 3, 4, 5},{1, 2, 3, 4, 6, 8, 7, 7, 5, 6});
    for(int a:temp) cout << a << " ";
    return 0;
}
*/
# Verdict Execution time Memory Grader output
1 Correct 9 ms 8184 KB ok, correct split
2 Correct 9 ms 8184 KB ok, correct split
3 Correct 8 ms 8184 KB ok, correct split
4 Correct 8 ms 8184 KB ok, correct split
5 Correct 11 ms 8184 KB ok, correct split
6 Correct 10 ms 8184 KB ok, correct split
7 Correct 172 ms 22776 KB ok, correct split
8 Correct 141 ms 20944 KB ok, correct split
9 Correct 292 ms 20472 KB ok, correct split
10 Correct 135 ms 23032 KB ok, correct split
11 Correct 156 ms 23032 KB ok, correct split
# Verdict Execution time Memory Grader output
1 Correct 8 ms 8184 KB ok, correct split
2 Correct 9 ms 8184 KB ok, correct split
3 Correct 9 ms 8188 KB ok, correct split
4 Correct 175 ms 21116 KB ok, correct split
5 Correct 157 ms 17144 KB ok, correct split
6 Correct 139 ms 23032 KB ok, correct split
7 Correct 136 ms 20728 KB ok, correct split
8 Correct 213 ms 18936 KB ok, correct split
9 Correct 182 ms 16888 KB ok, correct split
10 Correct 108 ms 18132 KB ok, correct split
11 Correct 94 ms 18052 KB ok, correct split
12 Correct 108 ms 18120 KB ok, correct split
# Verdict Execution time Memory Grader output
1 Correct 9 ms 8184 KB ok, correct split
2 Correct 134 ms 17016 KB ok, correct split
3 Correct 45 ms 11768 KB ok, correct split
4 Correct 9 ms 8184 KB ok, correct split
5 Correct 134 ms 18928 KB ok, correct split
6 Correct 124 ms 18680 KB ok, correct split
7 Correct 135 ms 18680 KB ok, correct split
8 Correct 230 ms 19576 KB ok, correct split
9 Correct 198 ms 18680 KB ok, correct split
10 Correct 39 ms 11128 KB ok, no valid answer
11 Correct 58 ms 12536 KB ok, no valid answer
12 Correct 118 ms 17780 KB ok, no valid answer
13 Correct 119 ms 17144 KB ok, no valid answer
14 Correct 119 ms 18160 KB ok, no valid answer
# Verdict Execution time Memory Grader output
1 Correct 8 ms 8184 KB ok, correct split
2 Correct 9 ms 8184 KB ok, no valid answer
3 Correct 8 ms 8184 KB ok, correct split
4 Correct 9 ms 8188 KB ok, correct split
5 Correct 9 ms 8184 KB ok, correct split
6 Correct 9 ms 8184 KB ok, correct split
7 Incorrect 9 ms 8184 KB invalid split: #1=3, #2=4, #3=5
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 9 ms 8184 KB ok, correct split
2 Correct 9 ms 8184 KB ok, correct split
3 Correct 8 ms 8184 KB ok, correct split
4 Correct 8 ms 8184 KB ok, correct split
5 Correct 11 ms 8184 KB ok, correct split
6 Correct 10 ms 8184 KB ok, correct split
7 Correct 172 ms 22776 KB ok, correct split
8 Correct 141 ms 20944 KB ok, correct split
9 Correct 292 ms 20472 KB ok, correct split
10 Correct 135 ms 23032 KB ok, correct split
11 Correct 156 ms 23032 KB ok, correct split
12 Correct 8 ms 8184 KB ok, correct split
13 Correct 9 ms 8184 KB ok, correct split
14 Correct 9 ms 8188 KB ok, correct split
15 Correct 175 ms 21116 KB ok, correct split
16 Correct 157 ms 17144 KB ok, correct split
17 Correct 139 ms 23032 KB ok, correct split
18 Correct 136 ms 20728 KB ok, correct split
19 Correct 213 ms 18936 KB ok, correct split
20 Correct 182 ms 16888 KB ok, correct split
21 Correct 108 ms 18132 KB ok, correct split
22 Correct 94 ms 18052 KB ok, correct split
23 Correct 108 ms 18120 KB ok, correct split
24 Correct 9 ms 8184 KB ok, correct split
25 Correct 134 ms 17016 KB ok, correct split
26 Correct 45 ms 11768 KB ok, correct split
27 Correct 9 ms 8184 KB ok, correct split
28 Correct 134 ms 18928 KB ok, correct split
29 Correct 124 ms 18680 KB ok, correct split
30 Correct 135 ms 18680 KB ok, correct split
31 Correct 230 ms 19576 KB ok, correct split
32 Correct 198 ms 18680 KB ok, correct split
33 Correct 39 ms 11128 KB ok, no valid answer
34 Correct 58 ms 12536 KB ok, no valid answer
35 Correct 118 ms 17780 KB ok, no valid answer
36 Correct 119 ms 17144 KB ok, no valid answer
37 Correct 119 ms 18160 KB ok, no valid answer
38 Correct 8 ms 8184 KB ok, correct split
39 Correct 9 ms 8184 KB ok, no valid answer
40 Correct 8 ms 8184 KB ok, correct split
41 Correct 9 ms 8188 KB ok, correct split
42 Correct 9 ms 8184 KB ok, correct split
43 Correct 9 ms 8184 KB ok, correct split
44 Incorrect 9 ms 8184 KB invalid split: #1=3, #2=4, #3=5
45 Halted 0 ms 0 KB -