题意:给定三种操作,插入边,删除边,询问。(边是无向的) 数据量大得恶心,不得已,用上不熟练的邻接表。 询问的时候,只要dfs一下,就可知道结果! #include<stdio.h> #include<string.h> int v[1005][1005],n,x,y; bool u[1005],find; int dfs(int p) { int i; for(i=1;i<=v[p][0];i++) { if(!u[v[p][i]]) { if(v[p][i]==y) { find=true; return 0; } u[v[p][i]]=true; dfs(v[p][i]); if(find) return 0; } } return 0; } int main() { //freopen("1.txt","r",stdin); char op[2]; int i,j,q; memset(v,0,sizeof(v)); scanf("%d %d",&n,&q); while(q--) { scanf("%s %d %d",op,&x,&y); if(op[0]=='I') { v[x][++v[x][0]]=y; v[y][++v[y][0]]=x; } else if(op[0]=='D') { for(i=1;i<=v[x][0] && v[x][i]!=y;i++); for(;i<v[x][0];i++) v[x][i]=v[x][i+1]; v[x][0]--; for(i=1;i<=v[y][0] && v[y][i]!=x;i++); for(;i<v[y][0];i++) v[y][i]=v[y][i+1]; v[y][0]--; } else { find=false; if(x==y) { printf("Y/n"); continue; } memset(u,false,sizeof(u)); dfs(x); if(find) printf("Y/n"); else printf("N/n"); } } return 0; }