Submission #428172

#TimeUsernameProblemLanguageResultExecution timeMemory
428172MOUF_MAHMALATSplit the Attractions (IOI19_split)C++14
0 / 100
71 ms8704 KiB
#include "split.h"
#include<bits/stdc++.h>
using namespace std;
typedef int ll;
bool is[100009];
ll cnt[100009],x,y,z;
vector<ll>ans;
vector<vector<ll> >v;
pair<ll,ll>id[3];
void dfs(ll d)
{
    if(id[0].first)
        ans[d]=id[0].second,id[0].first--;
    else if(id[1].first)
        ans[d]=id[1].second,id[1].first--;
    else
        ans[d]=id[2].second,id[2].first--;
    is[d]=1;
    for(auto it:v[d])
        if(is[it]==0)
            dfs(it);
}
void check(ll d)
{
    if(ans[d]==1)
        x++;
    else if(ans[d]==2)
        y++;
    else
        z++;
    is[d]=1;
    for(auto it:v[d])
    {
        if(is[it]==0&&ans[it]==ans[d])
            check(it);
    }
}
vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q)
{
    v.resize(n);
    ans.resize(n);
    id[0]= {a,1};
    id[1]= {b,2};
    id[2]= {c,3};
    sort(id,id+3);
    for(ll i=0; i<p.size(); i++)
    {
        cnt[p[i]]++,cnt[q[i]]++;
        v[p[i]].push_back(q[i]);
        v[q[i]].push_back(p[i]);
    }
    v.resize(n);
    for(ll i=0; i<n; i++)
    {
        if(cnt[i]>1)
            continue;
        dfs(i);
        memset(is,0,sizeof is);
        for(ll j=1; j<4; j++)
            for(ll i=0; i<n; i++)
            {
                if(ans[i]==j)
                {
                    check(i);
                    break;
                }
            }
        if(x!=a||y!=b||z!=c)
            for(ll i=0; i<n; i++)
                ans[i]=0;
        return ans;
    }
    dfs(0);
    for(ll j=1; j<4; j++)
        for(ll i=0; i<n; i++)
        {
            if(ans[i]==j)
            {
                check(i);
                break;
            }
        }
    if(x!=a||y!=b||z!=c)
        for(ll i=0; i<n; i++)
            ans[i]=0;
    return ans;
}

Compilation message (stderr)

split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:46:18: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |     for(ll i=0; i<p.size(); i++)
      |                 ~^~~~~~~~~
#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...