답안 #546982

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
546982 2022-04-09T05:25:14 Z OttoTheDino File Paths (BOI15_fil) C++17
33 / 100
1000 ms 48652 KB
    #include <bits/stdc++.h>
    using namespace std;
     
    #define rep(i,s,e)                  for (ll i = s; i <= e; ++i)
    #define rrep(i,s,e)                 for (ll i = s; i >= e; --i)
    #define pb                          push_back
    #define pf                          push_front
    #define fi                          first
    #define se                          second
    #define all(a)                      a.begin(), a.end()
    #define SZ(a)                       (ll)a.size()
    typedef long long ll;
    typedef pair<ll, ll> ii;
    typedef vector<ii> vii;
    typedef vector<ll> vi;
    typedef vector<double> vd;
    typedef vector<string> vs;
    typedef vector<ll> vll;
     
    const ll mx = 3e3;
    vi adj[mx+1], files[mx+1];
    ll cost[mx+1], costf[mx+1], ans[mx+1], s, k, p[mx+1];
    unordered_map<ll,ll> cnt, spec;
     
    void dfs3 (ll u, ll cur){

        spec[cur] = 1;
        for (ll v : adj[u]) {
            dfs3 (v, cur + cost[v]);
        }
    }
     
    void dfs2 (ll u, ll cur, ll d) {

        cnt[cur] += d;
        for (ll v : adj[u]) dfs2 (v, cur+cost[v], d);
    }
     
    void dfs (ll u, ll cur) {

        dfs2 (u, 0, 1);
        for (ll v : adj[u]) dfs (v, cur + cost[v]);
        for (ll v : files[u]) {
            ll x = k - cur - costf[v];
          ll go = u, cur2 = 0;
            if (x==0) {
              ans[v]=1;
              goto out;
            }
            for (ll i = 1; i*i <= x; ++i) {
                if (x%i==0) {
                    if (cnt[i-s]) {
                      ans[v] = 1;
                      goto out;
                    }
                    if (cnt[x/i-s]) {
                      ans[v]=1;
                        goto out;
                    }
                }
            }

            while (go>=0) {
                if (spec[k-costf[v]-cur2-s]) {ans[v] = 1;goto out;}
                cur2 += cost[go];
                go = p[go];
            }
          out:;
        }
        dfs2 (u, 0, -1);
    }
     
    int main() {
        ios::sync_with_stdio(0);
        cin.tie(0);
     
        ll n, m; cin >> n >> m >> k >> s;
        ++s;
     
        p[0] = -1;
     
        rep (i,1,n) {
            cin >> p[i] >> cost[i];
            ++cost[i];
            adj[p[i]].pb(i);
        }
        rep (i,1,m) {
            ll pr; cin >> pr >> costf[i];
            ++costf[i];
            files[pr].pb(i);
        }
      dfs3(0,0);
        dfs (0,0);
        rep (i,1,m) cout << (ans[i]?"YES":"NO") << "\n";
     
        return 0;
    }
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 468 KB Output is correct
2 Correct 1 ms 468 KB Output is correct
3 Correct 1 ms 596 KB Output is correct
4 Correct 15 ms 3684 KB Output is correct
5 Correct 7 ms 2028 KB Output is correct
6 Correct 4 ms 980 KB Output is correct
7 Correct 31 ms 6600 KB Output is correct
8 Correct 2 ms 724 KB Output is correct
9 Correct 2 ms 724 KB Output is correct
10 Correct 0 ms 468 KB Output is correct
11 Correct 1 ms 596 KB Output is correct
12 Correct 13 ms 3248 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 1616 KB Output is correct
2 Correct 10 ms 1492 KB Output is correct
3 Correct 10 ms 1568 KB Output is correct
4 Correct 13 ms 1628 KB Output is correct
5 Execution timed out 1083 ms 48652 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 468 KB Output is correct
2 Correct 1 ms 468 KB Output is correct
3 Correct 1 ms 596 KB Output is correct
4 Correct 15 ms 3684 KB Output is correct
5 Correct 7 ms 2028 KB Output is correct
6 Correct 4 ms 980 KB Output is correct
7 Correct 31 ms 6600 KB Output is correct
8 Correct 2 ms 724 KB Output is correct
9 Correct 2 ms 724 KB Output is correct
10 Correct 0 ms 468 KB Output is correct
11 Correct 1 ms 596 KB Output is correct
12 Correct 13 ms 3248 KB Output is correct
13 Correct 11 ms 1616 KB Output is correct
14 Correct 10 ms 1492 KB Output is correct
15 Correct 10 ms 1568 KB Output is correct
16 Correct 13 ms 1628 KB Output is correct
17 Execution timed out 1083 ms 48652 KB Time limit exceeded
18 Halted 0 ms 0 KB -