记录编号 |
577531 |
评测结果 |
AAAAAAAAAAAAAAAAWWWW |
题目名称 |
[CSP 2022S]星战 |
最终得分 |
80 |
用户昵称 |
yrtiop |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
7.479 s |
提交时间 |
2022-11-08 15:42:09 |
内存使用 |
53.42 MiB |
显示代码纯文本
#include <bits/stdc++.h>
const int maxn = 5e5 + 5;
std::set<int> G[maxn],S[maxn];
int n,m,deg[maxn],ans;
int main() {
freopen("csp2022_galaxy.in","r",stdin);
freopen("csp2022_galaxy.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i = 1;i <= m;++ i) {
int u,v;
scanf("%d %d",&u,&v);
S[v].emplace(u);
++ deg[u];
}
for(int i = 1;i <= n;++ i)
ans += (deg[i] == 1);
int Q,cnt = 0;
scanf("%d",&Q);
while(Q --) {
int op,u,v;
scanf("%d %d",&op,&u);
if(cnt >= 2e6) {
if(op == 1||op == 3)scanf("%d",&v);
puts("NO");
continue ;
}
if(op == 1) {
scanf("%d",&v);
S[v].erase(u);
G[v].emplace(u);
ans -= (deg[u] == 1);
ans += ((-- deg[u]) == 1);
++ cnt;
}
else if(op == 2) {
for(auto& v : S[u])
G[u].emplace(v),++ cnt,ans -= (deg[v] == 1),ans += ((-- deg[v]) == 1);
S[u].clear();
}
else if(op == 3) {
scanf("%d",&v);
G[v].erase(u);
S[v].emplace(u);
ans -= (deg[u] == 1);
ans += ((++ deg[u]) == 1);
++ cnt;
}
else {
for(auto& v : G[u])
S[u].emplace(v),++ cnt,ans -= (deg[v] == 1),ans += ((++ deg[v]) == 1);
G[u].clear();
}
if(ans == n)puts("YES");
else puts("NO");
}
return 0;
}