题目大意:给定一个无向联通图,q次询问当图中某k条边消失时图是否联通 强制在线
逗比题233
不明白什么意思的去看DZY Loves Chinese II的红字就明白这题为何逗比了0.0
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define M 100100 using namespace std; struct edges{ int x,y; }e[500500]; int n,m,q,block; bool v[500500]; char s[1010]; int fa[M],ans[M]; int Find(int x) { if(!fa[x]||fa[x]==x) return fa[x]=x; return fa[x]=Find(fa[x]); } void Unite(int x,int y) { x=Find(x);y=Find(y); if(x==y) return ; fa[x]=y;block--; } int main() { int i,j,k,_k; cin>>n>>m; for(i=1;i<=m;i++) scanf("%d%d",&e[i].x,&e[i].y); cin>>q; for(i=1;i<=q;i++) { scanf("%d",&_k); gets(s+1);k=0; for(j=1;s[j];j++) if( isdigit(s[j]) && !isdigit(s[j+1]) ) ++k; ans[i]=k^_k; } for(i=1;i<q;i++) printf("%s\n",ans[i+1]-ans[i]?"Connected":"Disconnected"); int temp=0; for(i=1,s[0]='a';s[i-1];i++) { if( isdigit(s[i]) ) temp*=10,temp+=s[i]-'0'; else if( isdigit(s[i-1]) ) v[temp^ans[q]]=1,temp=0; } block=n; for(i=1;i<=m;i++) if(!v[i]) Unite(e[i].x,e[i].y); puts(block==1?"Connected":"Disconnected"); return 0; }