답안 #890786

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
890786 2023-12-22T03:19:03 Z vjudge1 Jail (JOI22_jail) C++17
0 / 100
1 ms 348 KB
#include <bits/stdc++.h>

using namespace std;

#define all(x) x.begin(), x.end()
#define ar array
#define pb push_back
#define ln '\n'
#define int long long

using i64 = long long;

template <class F, class _S>
bool chmin(F &u, const _S &v){
    bool flag = false;
    if ( u > v ){
        u = v; flag |= true;
    }
    return flag;
}

template <class F, class _S>
bool chmax(F &u, const _S &v){
    bool flag = false;
    if ( u < v ){
        u = v; flag |= true;
    }
    return flag;
}

void solve(){
    int n; cin >> n;
    vector <vector<int>> G(n);
    for ( int i = 0; i + 1 < n; i++ ){
        int u, v; cin >> u >> v;
        --u, --v;
        G[u].pb(v), G[v].pb(u);
    }
    int m; cin >> m;
    vector <int> S(m), T(m);
    for ( int i = 0; i < m; i++ ){
        cin >> S[i] >> T[i];
        --S[i], --T[i];
    }
    vector <int> tmp;
    auto dfs = [&](auto dfs, int u, int p, int des) -> bool{
        if ( u == des ){
            return true;
        }
        for ( auto &v: G[u] ){
            if ( v != p ){
                if ( dfs(dfs, v, u, des) ){
                    tmp.pb(u);
                    return true;
                }
            }
        }
        return false;
    };
    vector <vector<int>> lst(m);
    for ( int i = 0; i < m; i++ ){
        tmp.clear();
        dfs(dfs, S[i], -1, T[i]);
        reverse(all(tmp));
        tmp.pb(T[i]);
        lst[i] = tmp;
    }
    auto bad = [&](int i, int j){
        for ( auto &u: lst[i] ){
            if ( u == S[j] ){
                return false;
            }
        }
        return true;
    };
    vector <vector<int>> P(n);
    for ( int i = 0; i < m; i++ ){
        for ( int j = i + 1; j < m; j++ ){
            if ( bad(i, j) && bad(j, i) ){
                cout << "No\n";
                return;
            }
            if ( bad(j, i) ){
                P[i].pb(j);
            } else if ( bad(i, j) ){
                P[j].pb(i);
            }
        }
    }
    vector <int> us(n);
    auto dfs2 = [&](auto dfs2, int u) -> bool{
        us[u] = 1;
        for ( auto &v: P[u] ){
            if ( !us[v] ){
                if ( !dfs2(dfs2, v) ){
                    return false;
                }
            } else if ( us[v] == 1 ){
                return false;
            }
        }
        us[u] = 2;
        return true;
    };
    bool flag = true;
    for ( int i = 0; i < n; i++ ){
        if ( !us[i] ){
            flag &= dfs2(dfs2, i);
        }
    }
    cout << (flag ? "Yes\n" : "No\n");
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int t; cin >> t;
    while ( t-- ){
        solve();
    }

    cout << '\n';
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 1 ms 344 KB Output is correct
4 Incorrect 1 ms 348 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -