답안 #926776

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
926776 2024-02-13T17:28:10 Z Tuanlinh123 Amusement Park (JOI17_amusement_park) C++17
18 / 100
46 ms 8308 KB
#include "Joi.h"
#include<bits/stdc++.h>
#define ll long long
#define pll pair<ll, ll>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ld long double
using namespace std;

void Joi(int n, int m, int u[], int v[], ll x, int t) 
{
    vector <vector <ll>> A(n);
    for (ll i=0; i<m; i++)
        A[u[i]].pb(v[i]), A[v[i]].pb(u[i]);
    vector <ll> tin(n, -1); ll Time=0;
    function <void(ll)> dfs=[&](ll u)
    {
        tin[u]=Time, Time=(Time+1)%60;
        MessageBoard(u, (x>>tin[u])&1);
        for (ll v:A[u])
            if (tin[v]==-1)
                dfs(v);
    }; dfs(0);
}
#include "Ioi.h"
#include<bits/stdc++.h>
#define ll long long
#define pll pair<ll, ll>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ld long double
using namespace std;

ll Ioi(int n, int m, int u[], int v[], int p, int cr, int t) 
{
    vector <vector <ll>> A(n);
    for (ll i=0; i<m; i++)
        A[u[i]].pb(v[i]), A[v[i]].pb(u[i]);
    ll Time=0, pos=0;
    vector <pll> realedge;
    vector <ll> order, tin(n, -1); 
    function <void(ll)> dfs=[&](ll u)
    {
        if (u==p) pos=order.size(); order.pb(u);
        tin[u]=Time, Time=(Time+1)%60;
        for (ll v:A[u])
            if (tin[v]==-1)
                realedge.pb({v, u}), dfs(v);
    }; dfs(0);
    for (ll i=0; i<n; i++) A[i].clear();
    for (auto [u, v]:realedge) A[u].pb(v), A[v].pb(u);
    pll best={1e9, 0};
    for (ll i=pos; i>=0 && i>pos-60; i--)
    {
        if (i+60>n) continue;
        vector <ll> mark(n, 0), dis(n, 0);
        for (ll j=i; j<i+60; j++)
            mark[order[j]]=1;
        function <void(ll, ll)> dfs1=[&](ll u, ll pa)
        {
            for (ll v:A[u]) if (v!=pa)
            {
                dfs1(v, u), mark[u]|=mark[v];
                if (mark[v]) dis[u]=max(dis[u], dis[v]+1);
            }
        }; dfs1(p, -1);
        ll cnt=0, Max=0;
        for (ll j=0; j<n; j++)
            cnt+=mark[j], Max=max(Max, dis[j]);
        best=min(best, {(cnt-1)*2-Max, i});
    }
    assert(best.fi<=120);
    vector <ll> mark(n, 0), pa(n, -1), ism(n, 0);
    vector <pll> dis(n, {0, -1}); 
    for (ll j=best.se; j<best.se+60; j++)
        mark[order[j]]=1;
    function <void(ll)> dfs1=[&](ll u)
    {
        for (ll v:A[u]) if (v!=pa[u])
        {
            pa[v]=u, dfs1(v), mark[u]|=mark[v];
            if (mark[v]) dis[u]=max(dis[u], {dis[v].fi+1, v});
        }
    }; dfs1(p);
    ll Max=p; ism[Max]=1;
    while (dis[Max].se!=-1)
        Max=dis[Max].se, ism[Max]=1;
    ll cnt=0, bit[60]={}; bit[tin[p]]=cr;
    function <void(ll)> answer=[&](ll u)
    {
        for (ll& v:A[u]) if (ism[v] && v!=pa[u])
            {swap(v, A[u].back()); break;}
        for (ll v:A[u])
            if (mark[v] && v!=pa[u])
                bit[tin[v]]=Move(v), cnt++, answer(v);
        if (!ism[u]) bit[tin[pa[u]]]=Move(pa[u]), cnt++;
    }; answer(p);
    assert(cnt<=120);
    ll ans=0;
    for (ll i=0; i<60; i++)
        if (bit[i]) ans|=1ll<<i;
    return ans;
}

Compilation message

Ioi.cpp: In lambda function:
Ioi.cpp:22:9: warning: this 'if' clause does not guard... [-Wmisleading-indentation]
   22 |         if (u==p) pos=order.size(); order.pb(u);
      |         ^~
Ioi.cpp:22:37: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
   22 |         if (u==p) pos=order.size(); order.pb(u);
      |                                     ^~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 784 KB Output is correct
2 Correct 0 ms 796 KB Output is correct
3 Correct 1 ms 804 KB Output is correct
4 Correct 0 ms 784 KB Output is correct
5 Correct 1 ms 1176 KB Output is correct
6 Correct 0 ms 796 KB Output is correct
7 Correct 0 ms 792 KB Output is correct
8 Correct 0 ms 792 KB Output is correct
9 Correct 0 ms 792 KB Output is correct
10 Correct 0 ms 796 KB Output is correct
11 Correct 3 ms 1356 KB Output is correct
12 Correct 0 ms 788 KB Output is correct
13 Correct 1 ms 804 KB Output is correct
14 Correct 1 ms 796 KB Output is correct
15 Correct 1 ms 792 KB Output is correct
16 Correct 0 ms 796 KB Output is correct
17 Correct 2 ms 804 KB Output is correct
18 Correct 0 ms 804 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 40 ms 5356 KB Output is correct
2 Correct 37 ms 5912 KB Output is correct
3 Correct 37 ms 5668 KB Output is correct
4 Correct 25 ms 3616 KB Output is correct
5 Correct 34 ms 4832 KB Output is correct
6 Correct 27 ms 4164 KB Output is correct
7 Correct 27 ms 4120 KB Output is correct
8 Correct 28 ms 4568 KB Output is correct
9 Runtime error 28 ms 5920 KB Execution killed with signal 6
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 796 KB Output is correct
2 Correct 0 ms 792 KB Output is correct
3 Correct 1 ms 796 KB Output is correct
4 Correct 2 ms 1584 KB Output is correct
5 Correct 5 ms 1336 KB Output is correct
6 Correct 2 ms 1584 KB Output is correct
7 Correct 3 ms 1584 KB Output is correct
8 Correct 2 ms 1592 KB Output is correct
9 Correct 17 ms 4728 KB Output is correct
10 Correct 18 ms 5004 KB Output is correct
11 Correct 11 ms 5180 KB Output is correct
12 Correct 0 ms 796 KB Output is correct
13 Correct 0 ms 796 KB Output is correct
14 Correct 0 ms 796 KB Output is correct
15 Correct 0 ms 784 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 41 ms 5396 KB Output is correct
2 Correct 37 ms 5624 KB Output is correct
3 Runtime error 39 ms 7884 KB Execution killed with signal 6
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 37 ms 5464 KB Output is correct
2 Correct 37 ms 5936 KB Output is correct
3 Runtime error 46 ms 8308 KB Execution killed with signal 6
4 Halted 0 ms 0 KB -