제출 #730766

#제출 시각아이디문제언어결과실행 시간메모리
730766danikoynovSplit the Attractions (IOI19_split)C++14
18 / 100
100 ms14284 KiB
#include "split.h"
#include <bits/stdc++.h>

using namespace std;

const int maxn = 1e5 + 10;

int deg[maxn], m, n;
vector < int > graph[maxn];

int used[maxn];
vector < int > order;
void stick(int v)
{
    used[v] = 1;
    order.push_back(v);
    for (int u : graph[v])
    {
        if (!used[u])
            stick(u);
    }
}

void fill_component(int v, int sz)
{
    used[v] = 1;
    order.push_back(v);
    for (int u : graph[v])
    {
        if (order.size() == sz)
            break;
        if (!used[u])
        fill_component(u, sz);
    }
}
vector<int> find_split(int N, int a, int b, int c, vector<int> p, vector<int> q)
{
    n = N;
    m = p.size();
    for (int i = 0; i < p.size(); i ++)
    {
        graph[p[i]].push_back(q[i]);
        graph[q[i]].push_back(p[i]);
    }

    if (a == 1)
    {
        vector < int > res(n, 0);
        fill_component(0, b);
        for (int v : order)
            res[v] = 2;
        int sp = 0;
        while(res[sp] != 0)
            sp ++;
        res[sp] = 1;
        for (int i = 0; i < n; i ++)
            if (res[i] == 0)
            res[i] = 3;
        return res;
    }
    bool deg2 = true;
    for (int i = 0; i < m; i ++)
    {
        if (graph[i].size() > 2)
        {
            deg2 = false;
            break;
        }
    }

    int leaf = 0;
    while(leaf < n && graph[leaf].size() != 1)
        leaf ++;
    if (leaf == n)
        leaf = 0;
    stick(leaf);

    if (deg2)
    {
        vector < int > res(n);
        for (int i = 0; i < n; i ++)
        {
            int v = order[i];
            if (i < a)
                res[v] = 1;
            else
            if (i < a + b)
            res[v] = 2;
            else
                res[v] = 3;
        }
        return res;
    }
    else
    {
        vector < int > tmp;
        return tmp;
    }

}

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

split.cpp: In function 'void fill_component(int, int)':
split.cpp:30:26: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   30 |         if (order.size() == sz)
      |             ~~~~~~~~~~~~~^~~~~
split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:40:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |     for (int 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...