Submission #567197

#TimeUsernameProblemLanguageResultExecution timeMemory
567197maomao90Jail (JOI22_jail)C++17
0 / 100
13 ms5440 KiB
// Hallelujah, praise the one who set me free // Hallelujah, death has lost its grip on me // You have broken every chain, There's salvation in your name // Jesus Christ, my living hope #include <bits/stdc++.h> using namespace std; template <class T> inline bool mnto(T& a, T b) {return a > b ? a = b, 1 : 0;} template <class T> inline bool mxto(T& a, T b) {return a < b ? a = b, 1: 0;} #define REP(i, s, e) for (int i = s; i < e; i++) #define RREP(i, s, e) for (int i = s; i >= e; i--) typedef long long ll; typedef long double ld; #define FI first #define SE second typedef pair<int, int> ii; typedef pair<ll, ll> pll; typedef tuple<int, int, int> iii; #define ALL(_a) _a.begin(), _a.end() #define SZ(_a) (int) _a.size() #define pb push_back typedef vector<int> vi; typedef vector<ll> vll; typedef vector<ii> vii; typedef vector<iii> viii; #ifndef DEBUG #define cerr if (0) cerr #endif const int INF = 1000000005; const ll LINF = 1000000000000000005ll; const int MAXN = 200005; int t; int n; vi adj[MAXN]; int m; ii st[MAXN]; int lr[MAXN], rl[MAXN]; int psm[MAXN]; int fw[MAXN]; void incre(int i, int x) { for (; i <= n; i += i & -i) fw[i] += x; } int qry(int i) { int res = 0; for (; i > 0; i -= i & -i) res += fw[i]; return res; } int main() { #ifndef DEBUG ios::sync_with_stdio(0), cin.tie(0); #endif cin >> t; while (t--) { cin >> n; REP (i, 1, n) { int a, b; cin >> a >> b; adj[a].pb(b); adj[b].pb(a); } cin >> m; REP (i, 0, n + 1) { lr[i] = 0; rl[i] = n + 1; fw[i] = 0; } REP (i, 0, m) { cin >> st[i].FI >> st[i].SE; if (st[i].FI < st[i].SE) { mxto(lr[st[i].FI], st[i].SE); } else { mnto(rl[st[i].FI], st[i].SE); } } REP (i, 1, n + 1) { if (lr[i] != 0) { cerr << i << ": " << lr[i] << '\n'; incre(lr[i], 1); } if (rl[i] != n + 1) { cerr << i << ": " << rl[i] << '\n'; incre(rl[i], 1); } } bool pos = 1; REP (i, 1, n + 1) { if (lr[i] != 0) { incre(lr[i], -1); if (qry(lr[i]) > 0) { pos = 0; break; } } if (rl[i] != n + 1) { incre(rl[i], -1); } } if (pos) { cout << "Yes\n"; } else { cout << "No\n"; } } return 0; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...