POJ 2492 A Bug is life
来源:互联网 发布:linux连不通数据库端口 编辑:程序博客网 时间:2024/04/30 19:40
施法中………………………………………………………………….
……………………………………………………………………………
peng! 一道传送门:
http://poj.org/problem?id=2492
这题是类似于POJ1182食物链同样类型的,加权并查集。
可以先做这道题,之后在做1182—http://poj.org/problem?id=1182
先说说这道题,比较变态吧,研究虫子是不是同性恋。
我们在并查集的基础上加一个 r【】 代表当前点与其父节点的关系,我们假设0代表同性,1代表异性。
我们在找祖宗的时候我们可以想到每次更换父节点,r[]都会有所改变。
//我们用 int t代表当前点 x 的父节点。那么当我们更换父节点是,r[x]的值会改变。//我们可以看到x x的爹 x与x他爹的爹(也就是x的爷爷)0 1 11 0 11 1 10 0 0这个大家最好自己 推倒 X我是污妖王X 一遍(当然你可以推倒好多次)那么r[x]=(r[x]+r[t])%2之后find_father的部分说完了,该联合的部分了两个点联合,他们的关系应该怎么写呢?我们假设 unite(int x,int y) xx为x的祖宗 yy为y的祖宗当祖宗不同时,f[yy]=xx;sex[yy]=(sex[x]+sex[y]+1)%2;这个公式是怎么推来的呢?x对根节点 xx 为1 xx对x也为1 同理可得yy与y 之后+1是因为 x与y 结合 表明x 与 y 恋爱 更改一下关系变好了,当然可以写成sex[yy]= (sex[x]-sex[x]+1)%2 好了附上代码:#include <stdio.h>#include <algorithm>#include <string.h>#define N 500100using namespace std;int f[N],sex[N];int n,m;void init(int n){ for(int i=0;i<=n;i++) { f[i]=i; sex[i]=0; }}int find_father(int x){ if(x==f[x]) return x; int t=f[x]; f[x]=find_father(f[x]); sex[x]=(sex[x]+sex[t])%2; return f[x];}void unin(int x,int y){ int xx=find_father(x); int yy=find_father(y); if(xx!=yy) { f[yy]=xx; // y-y father is---> xx; sex[yy]=(sex[y]+sex[x]+1)%2; // x 喜欢 y }}int main(){ int t,times=1,x,y; scanf("%d",&t); while(t--) { scanf("%d %d",&n,&m); init(n); int flag=0; for(int i=0;i<m;i++) { scanf("%d %d",&x,&y); if(find_father(x)==find_father(y)) { if(sex[x]!=(sex[y]+1)%2) { flag=1; } } else unin(x,y); } printf("Scenario #%d:\n",times++); if(flag) printf("Suspicious bugs found!\n\n"); else printf("No suspicious bugs found!\n\n"); } return 0;}
写的不好,请多指导。谢谢大家了。
0 0
- POJ 2492 A Bug is life
- poj 2492 A Bug's Life
- POJ-2492 A Bug's Life
- Poj 2492 A Bug's Life
- poj 2492 A Bug's Life
- POJ 2492 - A Bug's Life
- POJ 2492 A Bug's Life
- POJ-2492-A Bug's Life
- poj 2492 A Bug's Life
- poj 2492 A Bug's Life
- poj 2492 A Bug's Life
- POJ 2492 A Bug's Life
- poj 2492 A Bug's Life
- POJ-2492-A Bug's Life
- poj 2492 A Bug's Life
- poj 2492 A Bug's Life
- POJ 2492 A Bug's Life
- POJ 2492 A Bug's Life
- scala习题(14)——模式匹配和样例类
- PC-Lint的使用方法
- JVM学习笔记(三)之内存管理
- java 实现PageRank算法
- 查找算法
- POJ 2492 A Bug is life
- Eclipse java工程中配置opencv
- 蓝桥杯 算法提高 排列数
- RedHat6.5 安装Oracle 12c RAC
- JDK 6 目录结构介绍以及JDK中的工具研究
- B-tree B+tree
- 2599: [IOI2011]Race|树的点分治
- Kruskal算法求MST(最小生成树)
- CMS(新闻发布系统)存放新闻表内容的字段是text,数据过多无法插入,解决办法!