Submission #143385

# Submission time Handle Problem Language Result Execution time Memory
143385 2019-08-13T22:06:24 Z Bench0310 Split the Attractions (IOI19_split) C++14
40 / 100
2000 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]);
    res[src[0]]=t;
    num--;
    while(num>0)
    {
        if(q.empty()) while(1);
        int e=q.front();
        q.pop();
        for(int to:v[e])
        {
            if(to!=centroid&&pos[id[to]]==1&&res[to]==0)
            {
                q.push(to);
                res[to]=t;
                num--;
            }
            if(num==0) break;
        }
    }
}

void solve_two(int num,int t)
{
    queue<int> q;
    q.push(centroid);
    while(num>0)
    {
        if(q.empty()) while(1);
        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()
{
    int _n,_m;
    scanf("%d%d",&_n,&_m);
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    vector<int> one,two;
    for(int i=0;i<_m;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        one.push_back(x);
        two.push_back(y);
    }
    vector<int> temp=find_split(_n,a,b,c,one,two);
    for(int a:temp) cout << a << " ";
    return 0;
}
*/
# Verdict Execution time Memory Grader output
1 Correct 11 ms 8184 KB ok, correct split
2 Correct 18 ms 8184 KB ok, correct split
3 Correct 13 ms 8184 KB ok, correct split
4 Correct 9 ms 8216 KB ok, correct split
5 Correct 9 ms 8184 KB ok, correct split
6 Correct 9 ms 8184 KB ok, correct split
7 Correct 150 ms 22780 KB ok, correct split
8 Correct 128 ms 20948 KB ok, correct split
9 Correct 160 ms 20344 KB ok, correct split
10 Correct 137 ms 23032 KB ok, correct split
11 Correct 141 ms 23032 KB ok, correct split
# 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 9 ms 8184 KB ok, correct split
4 Correct 162 ms 21184 KB ok, correct split
5 Correct 115 ms 17016 KB ok, correct split
6 Correct 137 ms 23008 KB ok, correct split
7 Correct 146 ms 20828 KB ok, correct split
8 Correct 221 ms 18808 KB ok, correct split
9 Correct 136 ms 16888 KB ok, correct split
10 Correct 90 ms 18004 KB ok, correct split
11 Correct 94 ms 18004 KB ok, correct split
12 Correct 122 ms 18124 KB ok, correct split
# Verdict Execution time Memory Grader output
1 Correct 9 ms 8184 KB ok, correct split
2 Correct 116 ms 17016 KB ok, correct split
3 Correct 46 ms 11768 KB ok, correct split
4 Correct 9 ms 8184 KB ok, correct split
5 Correct 134 ms 18808 KB ok, correct split
6 Correct 128 ms 18680 KB ok, correct split
7 Correct 143 ms 18596 KB ok, correct split
8 Correct 141 ms 19672 KB ok, correct split
9 Correct 126 ms 18680 KB ok, correct split
10 Correct 39 ms 11128 KB ok, no valid answer
11 Correct 56 ms 12536 KB ok, no valid answer
12 Correct 121 ms 17788 KB ok, no valid answer
13 Correct 122 ms 17144 KB ok, no valid answer
14 Correct 113 ms 18156 KB ok, no valid answer
# Verdict Execution time Memory Grader output
1 Correct 9 ms 8184 KB ok, correct split
2 Correct 8 ms 8184 KB ok, no valid answer
3 Correct 9 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 Correct 9 ms 8184 KB ok, correct split
8 Execution timed out 2053 ms 8184 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 11 ms 8184 KB ok, correct split
2 Correct 18 ms 8184 KB ok, correct split
3 Correct 13 ms 8184 KB ok, correct split
4 Correct 9 ms 8216 KB ok, correct split
5 Correct 9 ms 8184 KB ok, correct split
6 Correct 9 ms 8184 KB ok, correct split
7 Correct 150 ms 22780 KB ok, correct split
8 Correct 128 ms 20948 KB ok, correct split
9 Correct 160 ms 20344 KB ok, correct split
10 Correct 137 ms 23032 KB ok, correct split
11 Correct 141 ms 23032 KB ok, correct split
12 Correct 9 ms 8184 KB ok, correct split
13 Correct 9 ms 8184 KB ok, correct split
14 Correct 9 ms 8184 KB ok, correct split
15 Correct 162 ms 21184 KB ok, correct split
16 Correct 115 ms 17016 KB ok, correct split
17 Correct 137 ms 23008 KB ok, correct split
18 Correct 146 ms 20828 KB ok, correct split
19 Correct 221 ms 18808 KB ok, correct split
20 Correct 136 ms 16888 KB ok, correct split
21 Correct 90 ms 18004 KB ok, correct split
22 Correct 94 ms 18004 KB ok, correct split
23 Correct 122 ms 18124 KB ok, correct split
24 Correct 9 ms 8184 KB ok, correct split
25 Correct 116 ms 17016 KB ok, correct split
26 Correct 46 ms 11768 KB ok, correct split
27 Correct 9 ms 8184 KB ok, correct split
28 Correct 134 ms 18808 KB ok, correct split
29 Correct 128 ms 18680 KB ok, correct split
30 Correct 143 ms 18596 KB ok, correct split
31 Correct 141 ms 19672 KB ok, correct split
32 Correct 126 ms 18680 KB ok, correct split
33 Correct 39 ms 11128 KB ok, no valid answer
34 Correct 56 ms 12536 KB ok, no valid answer
35 Correct 121 ms 17788 KB ok, no valid answer
36 Correct 122 ms 17144 KB ok, no valid answer
37 Correct 113 ms 18156 KB ok, no valid answer
38 Correct 9 ms 8184 KB ok, correct split
39 Correct 8 ms 8184 KB ok, no valid answer
40 Correct 9 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 Correct 9 ms 8184 KB ok, correct split
45 Execution timed out 2053 ms 8184 KB Time limit exceeded
46 Halted 0 ms 0 KB -