A Bug's Life____并查集
English preparation:
falsify 伪造;篡改;歪曲;证明...虚假
the sexual behavior of a rare species of bugs. 一种稀有昆虫的性行为。
the number of scenarios 场景数量
consecutively 连续地
趣语:
这个时代,是个雷人的时代。凤姐的出现,让我们对自己的审美观产生了怀疑;
著姐的降临,使我们对自己的性取向做出了更正。而如今,bug们被同性恋了,这直接就是商人们为了扩大HS产业的炒作。
哪一天,也许你也被变态了,被脑残了。。。
题目大意:给出n条虫子,m个配对(男<->女)的情况,问数据有没有错误(出现同性配对)?
Reference:
1.https://blog.csdn.net/freezhanacmore/article/details/8799495
2.https://www.cnblogs.com/dongsheng/archive/2012/08/08/2627917.html
3.https://blog.csdn.net/pku_Coder/article/details/53520171
codes:
#include<cstdio> #include<iostream> const int maxn=2000+10; int p[maxn]; //记录父节点 int r[maxn]; //记录与父节点关系, 0 同类, 1异类 int find(int x) { if(x==p[x]) return x; int t=p[x]; p[x]=find(p[x]); r[x]=(r[x]+r[t])%2; //每次回溯更新一次父节点,相应更新关系 return p[x]; } void Union(int x,int y) { int fx=find(x); int fy=find(y); p[fx]=fy; //任意 r[fx]=(r[x]+1+r[y])%2; //r[]没有方向.我就是这一步的关系,这一个式子,这一处关节没有搞明白! } void set(int n) { for(int i=1;i<=n;i++) { p[i]=i; r[i]=0; } } int main() { int T; scanf("%d",&T); for(int i=1;i<=T;i++) { int n,m; scanf("%d%d",&n,&m); set(n); int x,y; bool flag=true; while(m--) { scanf("%d%d",&x,&y); //本应不同类 if(find(x)==find(y)) { if(r[x]==r[y]) //如果同类 { flag=false; continue; } } else Union(x,y); } printf("Scenario #%d:\n",i); if(flag) printf("No suspicious bugs found!\n"); else printf("Suspicious bugs found!\n"); printf("\n"); } return 0; }