제출 #1177688

#제출 시각아이디문제언어결과실행 시간메모리
1177688mychecksedadJail (JOI22_jail)C++20
5 / 100
5086 ms413088 KiB
/* Author : Mychecksdead */ #include<bits/stdc++.h> using namespace std; #define ll long long int #define MOD (1000000000+7) #define MOD1 (998244353) #define pb push_back #define all(x) x.begin(), x.end() #define en cout << '\n' #define ff first #define ss second #define pii pair<int,int> #define vi vector<int> const int N = 1e6+100, M = 1e5+10, K = 52, MX = 30; int n, m, a[N][2], tin[N], tout[N], timer = 0; vi g[N], A[N], B[N], G[N]; int cur, curv; bool dead; vector<vector<bool>> go; void pre(int v, int p){ tin[v] = timer++; for(int u: g[v]){ if(u != p){ pre(u, v); } } tout[v] = timer++; } bool dfs(int v, int p, int t){ if(v == t){ for(int x: A[v]) go[cur][x] = 1; return true; } for(int u: g[v]){ if(u != p){ bool ok = dfs(u, v, t); if(ok){ //process v, it's a node the path of cur if(curv != v){ for(int x: A[v]){ go[cur][x] = 1; } } for(int x: B[v]) go[x][cur] = 1; return true; } } } return false; } void dfs2(int v, vector<int> &vis){ vis[v] = 1; for(int u: G[v]){ if(vis[u] == 2) continue; if(vis[u] == 1){ dead = 1; return; } dfs2(u, vis); } vis[v] = 2; } void solve(){ cin >> n; for(int i = 1; i <= n; ++i) g[i].clear(); for(int i = 1; i <= n; ++i) A[i].clear(); for(int i = 1; i <= n; ++i) B[i].clear(); for(int i = 1; i <= n; ++i) G[i].clear(); go.clear(); for(int i = 1; i < n; ++i){ int u, v; cin >> u >> v; g[u].pb(v); g[v].pb(u); } cin >> m; go.resize(m + 2, vector<bool>(m + 2)); for(int i = 1; i <= m; ++i){ cin >> a[i][0] >> a[i][1]; A[a[i][0]].pb(i); B[a[i][1]].pb(i); } for(int i = 1; i <= m; ++i){ cur = i; curv = a[i][0]; dfs(a[i][0], a[i][0], a[i][1]); } vector<int> vis(m + 1); dead = 0; for(int i = 1; i <= m; ++i){ for(int j = i + 1; j <= m; ++j) dead |= (go[i][j] && go[j][i]); } if(dead) cout << "No"; else cout << "Yes"; } int main(){ cin.tie(0); ios::sync_with_stdio(0); int tt = 1, aa; // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); cin >> tt; while(tt--){ solve(); en; } cerr<<"time taken : "<<(float)clock()/CLOCKS_PER_SEC<<" seconds\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...