제출 #1370396

#제출 시각아이디문제언어결과실행 시간메모리
1370396solution6312Theseus (CEOI25_theseus)C++17
12 / 100
43 ms5368 KiB
#include <vector>
#include <cassert>
#include <queue>
#include <iostream>
using namespace std;
using pii=pair<int, int>;

namespace
{
    const int MN=1e4+13;
    int N, T;
    vector<int> G[MN];
    int d[MN];
    void bfs()
    {
        for (int i=1; i<=N; i++) d[i]=-1;
        queue<int> q;
        d[T]=0;
        q.push(T);
        while (q.size())
        {
            int u=q.front(); q.pop();
            for (int v:G[u]) if (d[v]==-1)
            {
                d[v]=d[u]+1;
                q.push(v);
            }
        }
    }
}

vector<int> paint(int n, vector<pii> E, int t)
{
    N=n; T=t;
    for (int i=1; i<=N; i++) G[i].clear();
    for (auto [U, V]:E)
    {
        G[U].push_back(V);
        G[V].push_back(U);
    }
    bfs();
    vector<int> ans;
    int mx=N/2;
    for (auto [U, V]:E) ans.push_back((mx-min(d[U], d[V]))&1);
    //for (int i:ans) cerr<<i<<' '; cerr<<endl;
    return ans;
}

int travel(int N, int U, vector<pii> G)
{
    //cerr<<U<<endl;
    if (G.size()==2)
    {
        if (G[0].second==1)
        {
            assert(G[1].second==0);
            return G[0].first;
        }
        else
        {
            assert(G[1].second==1);
            return G[1].first;
        }
    }
    assert(G.size()==3);
    int c0=0, c1=0;
    for (auto [x, y]:G)
    {
        if (y) c1++;
        else c0++;
    }
    //cerr<<c0<<' '<<c1<<endl;
    if (c1<c0) { for (auto [x, y]:G) if (y) return x; }
    else { for (auto [x, y]:G) if (!y) return x; }
    assert(0);
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…