比赛 2024暑假C班集训E 评测结果 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
题目名称 部落冲突 最终得分 0
用户昵称 wzh0425 运行时间 199.840 s
代码语言 C++ 内存使用 10.61 MiB
提交时间 2024-07-14 10:27:33
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int sc[600005][2],t;
  4. int n,m,hd[600005],nxt[600005],ver[600005],vis[600005],bj[600005],tmp,idx;
  5. void add(int x,int y){
  6. ver[++idx]=y;
  7. nxt[idx]=hd[x];
  8. hd[x]=idx;
  9. }
  10. void dfs(int x,int ed){
  11. if (x==ed){
  12. tmp=1;
  13. return;
  14. }
  15. for (int i=hd[x];i;i=nxt[i]){
  16. int y=ver[i];
  17. if (!vis[i]&&!bj[i]){
  18. bj[i]=1;
  19. dfs(y,ed);
  20. bj[i]=0;
  21. }
  22. }
  23. }
  24. int main(){
  25. freopen("lct.in","r",stdin);
  26. freopen("lct.out","w",stdout);
  27. scanf("%d%d",&n,&m);
  28. for (int i=1;i<=n-1;i++){
  29. int x,y;
  30. scanf("%d%d",&x,&y);
  31. add(x,y);
  32. add(y,x);
  33. }
  34. for (int i=1;i<=m;i++){
  35. char s;
  36. int x,y;
  37. scanf("%s",&s);
  38. if (s=='Q'){
  39. scanf("%d%d",&x,&y);
  40. tmp=0;
  41. dfs(x,y);
  42. if (tmp==0) printf("No\n");
  43. else printf("Yes\n");
  44. }else if (s=='C'){
  45. scanf("%d%d",&x,&y);
  46. for (int j=hd[x];j;j=nxt[j]){
  47. int yy=ver[j];
  48. if (y==yy){
  49. vis[j]=1;
  50. sc[++t][0]=j;
  51. break;
  52. }
  53. }
  54. for (int j=hd[y];j;j=nxt[j]){
  55. int xx=ver[j];
  56. if (xx==x){
  57. vis[j]=1;
  58. sc[++t][1]=j;
  59. break;
  60. }
  61. }
  62. }else{
  63. scanf("%d%d",&x);
  64. vis[sc[x][0]]=0;
  65. vis[sc[x][1]]=0;
  66. }
  67. }
  68. return 0;
  69. }