A Bug's Life____并查集
Posted dragondragon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
以上是关于A Bug's Life____并查集的主要内容,如果未能解决你的问题,请参考以下文章