当前位置: 代码迷 >> 综合 >> bzoj 3563: DZY Loves Chinese
  详细解决方案

bzoj 3563: DZY Loves Chinese

热度:102   发布时间:2023-10-29 10:21:14.0

题解

这题很搞笑。。
想了一下发现,这个强制在线可以帮我出答案
难点就是怎么找到每个询问是什么
问了下做过的人,没有行末回车
于是就可以很愉快地乱搞了,具体看代码。。
然后最后一次暴力搞就行了

#include<cstdio>
#include<cstring>
const int M=500000;
int n,m,q;
char ss[1005];
int ans=0;//之前有多少个
bool ok[M];
int f[M];
int X[M],Y[M];
int find (int x)
{return f[x]==x?f[x]:f[x]=find(f[x]);
}
int main()
{scanf("%d%d",&n,&m);for (int u=1;u<=m;u++)  scanf("%d%d",&X[u],&Y[u]);scanf("%d\n",&q);for (int u=1;u<=q;u++){gets(ss);int len=strlen(ss);int lalal=0;int now=0;while (ss[now]>='0'&&ss[now]<='9') {lalal=lalal*10+ss[now]-'0';now++;}int cnt=0;//有多少个 for (int i=now;i<len;i++)//直接扫过去 {if (ss[i]>='0'&&ss[i]<='9'){cnt++;while (ss[i]>='0'&&ss[i]<='9') i++;}}int shen=(lalal^cnt);if (u!=1){if (shen==ans) printf("Disconnected\n");else printf("Connected\n");}ans=shen;}int len=strlen(ss);int lalal=0,now=0;while (ss[now]>='0'&&ss[now]<='9') {lalal=lalal*10+ss[now]-'0';now++;}memset(ok,true,sizeof(ok));for (int i=now;i<len;i++)//直接扫过去 {if (ss[i]>='0'&&ss[i]<='9'){int lalal=0;while (ss[i]>='0'&&ss[i]<='9') {lalal=lalal*10+(ss[i]-'0');i++;}ok[lalal^ans]=false;}}for (int u=1;u<=n;u++) f[u]=u;for (int u=1;u<=m;u++){if (ok[u]){int x=find(X[u]),y=find(Y[u]);f[x]=y;}}bool tf=true;int x=find(1);for (int u=2;u<=n;u++)if (x!=find(u)) {tf=false;break;}if (!tf) printf("Disconnected\n");else printf("Connected\n");return 0;
}
  相关解决方案