比赛 2024暑假C班集训E 评测结果 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
题目名称 部落冲突 最终得分 0
用户昵称 wzh0425 运行时间 199.840 s
代码语言 C++ 内存使用 10.61 MiB
提交时间 2024-07-14 10:27:33
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int sc[600005][2],t;
int n,m,hd[600005],nxt[600005],ver[600005],vis[600005],bj[600005],tmp,idx;
void add(int x,int y){
    ver[++idx]=y;
    nxt[idx]=hd[x];
    hd[x]=idx;
}
void dfs(int x,int ed){
    if (x==ed){
        tmp=1;
        return;
    }
    for (int i=hd[x];i;i=nxt[i]){
        int y=ver[i];
        if (!vis[i]&&!bj[i]){
            bj[i]=1;
            dfs(y,ed);
            bj[i]=0;
        }
    }
}
int main(){
    freopen("lct.in","r",stdin);
    freopen("lct.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n-1;i++){
        int x,y;
        scanf("%d%d",&x,&y);
        add(x,y);
        add(y,x);
    }
    for (int i=1;i<=m;i++){
        char s;
        int x,y;
        scanf("%s",&s);
        if (s=='Q'){
            scanf("%d%d",&x,&y);
            tmp=0;
            dfs(x,y);
            if (tmp==0) printf("No\n");
            else printf("Yes\n");
        }else if (s=='C'){
            scanf("%d%d",&x,&y);
            for (int j=hd[x];j;j=nxt[j]){
                int yy=ver[j];
                if (y==yy){
                    vis[j]=1;
                    sc[++t][0]=j;
                    break;
                }
            }
            for (int j=hd[y];j;j=nxt[j]){
                int xx=ver[j];
                if (xx==x){
                    vis[j]=1;
                    sc[++t][1]=j;
                    break;
                }
            }
        }else{
            scanf("%d%d",&x);
            vis[sc[x][0]]=0;
            vis[sc[x][1]]=0;
        }
    }
    return 0;
}