地址 http://poj.org/problem?id=1182

题解

可以考虑使用并查集解决 但是并不是简单的记录是否同一组的这般使用

每个动物都有三个并查集 自己 天敌 捕食 并查集

那么在获得一条信息后 我们先判断真伪

x不能吃x 自己

x y不能超过数目类型

当xy是同一类的时候  x不会出现在y的天敌和捕食并查集中(其中已经包含 y不会出现在x的天敌和捕食并查集中)

确认为真后 合并更新 x y 的同类并查集   天敌并查集和 不是并查集

当x吃y的信息, 则 x不会出现在y的同类和捕食并查集中(已经包含y不会出现在x同类且y不会出现在x的天敌并查集中)

确认为真后 合并更新 x和y的天敌并查集 合并更新 x的天敌与y的捕食并查集 合并更新x的捕食与y的并查集

代码

 #include <iostream>
#include <algorithm>
#include <vector> using namespace std; const int MAX_N = ; int par[MAX_N]; //父节点
int rankk[MAX_N]; //树的高度 //初始化n个元素
void init(int n)
{
for (int i = ; i < n; i++) {
par[i] = i;
rankk[i] = ;
}
} //查询树的根
int find(int x) {
if (par[x] == x) {
return x;
}
else {
return par[x] = find(par[x]);
}
} //合并x和y所属于的集合
void unite(int x, int y) {
x = find(x);
y = find(y);
if (x == y) return; if (rankk[x] < rankk[y]) {
par[x] = y;
}
else {
par[y] = x;
if (rankk[x] == rankk[y]) rankk[x]++;
}
} //判断x和y是否属于同一个集合
bool same(int x, int y) {
return find(x) == find(y);
}
//=============================================================
int N, K;
int T[MAX_N], X[MAX_N], Y[MAX_N]; void solve()
{
//初始化并查集
//元素x ,x+N,x+2*N分别代表x-A x-B x-C
init(N * ); int ans = ;
for (int i = ; i < K; i++) {
int t = T[i];
int x = X[i] - , y = Y[i] - ; //不正确的编号
if (x < || N <= x || y < || N <= y) {
ans++;
continue;
} if (t == ) {
//xy属于同一类
if (same(x, y + N) || same(x, y + * N)) {
ans++;
}
else {
unite(x, y);
unite(x + N, y + N);
unite(x + * N, y + * N);
}
}
else {
//x吃y
if (same(x, y) || same(x, y + * N)) {
ans++;
}
else {
unite(x, y + N);
unite(x + N, y + * N);
unite(x + * N, y);
}
}
} printf("%d\n", ans);
} int main()
{
cin >> N >> K; for (int i = ; i < K; i++) {
cin >> T[i] >> X[i] >> Y[i];
} solve();
return ;
}

poj 1182 食物链 并查集 题解《挑战程序设计竞赛》的更多相关文章

  1. POJ 1182 食物链 [并查集 带权并查集 开拓思路]

    传送门 P - 食物链 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit  ...

  2. POJ 1182 食物链(并查集的使用)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 81915   Accepted: 24462 Description ...

  3. poj 1182 食物链 并查集的又一个用法

    食物链   Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 41584   Accepted: 12090 Descripti ...

  4. POJ 1182食物链(并查集)

    食物链Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 85474 Accepted: 25549Description动物王国中有三 ...

  5. POJ - 1182 食物链 并查集经典

    思路:设r(x)表示节点x与根结点的关系,px表示x的根结点.记录每个节点与其父节点的关系,就能很方便知道每个节点以及和它的父节点的关系. struct node{ int par; //父亲节点 i ...

  6. poj——1182食物链 并查集(提升版)

    因为是中文题,题意就不说了,直接说思路: 我们不知道给的说法中的动物属于A B C哪一类,所以我们可以用不同区间的数字表示这几类动物,这并不影响结果,我们可以用并查集把属于一类的动物放在一块,举个例子 ...

  7. POJ 1182-食物链 [并查集] 《挑战程序设计竞赛》2.4

    Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...

  8. POJ 1182 食物链 (并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 50601   Accepted: 14786 Description ...

  9. POJ 1182 食物链(并查集)

    题目链接 经过宝哥的讲解,终于对这种问题有了进一步的理解.根据flag[x]和flag[y]求flag[tx]是最关键的了. 0吃1,1吃2,2吃0. 假设flag[tx] = X; 那么X + fl ...

随机推荐

  1. 设计模式(含UML、设计原则、各种模式讲解链接)

    一.统一建模语言UML UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法 UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进 ...

  2. Using the Security System 使用安全系统

    In this lesson, you will learn how to use a Security System in the application. When you use this sy ...

  3. Prism_Composite Commands(3)

    Composite Commands 在许多情况下,视图模型定义的命令将绑定到关联视图中的控件,以便用户可以直接从视图中调用该命令.但是,在某些情况下,您可能希望能够从应用程序UI的父视图中的控件调用 ...

  4. 编译原理之LL(1)文法的判断,递归下降分析程序

    1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不 ...

  5. Docker运行dotnetcore

                    windows下安装docker 参考: https://www.jianshu.com/p/502b4ac536ef https://docs.docker.com/ ...

  6. RMAN异机恢复主要步骤和注意事项

    以后改行了或老了回头看看,我曾经会这些,也是件愉快的事 [备份]--创建目录[oracle@test20 backup]$ mkdir -p /home/oracle/backup--备份脚本[ora ...

  7. XTTS Creates Alias on Destination when Source and Destination use ASM (Doc ID 2351123.1)

    XTTS Creates Alias on Destination when Source and Destination use ASM (Doc ID 2351123.1) APPLIES TO: ...

  8. ReactNative: 创建自定义List列表组件

    一.介绍 在App中,很多数据消息显示都是一行行动态展示的,例如新闻标题,其实每一条新闻标题都可以独立成一个简单的列表组件,之前我们使用Text组件将数据都写死了,为了提高组件的灵活性,我们可以使用T ...

  9. Charles 使用笔记

     一.介绍 Charles 属于抓包软件. Charles 多平台支持,mac.windows.linux. Charles 是收费软件,可以免费试用 30 天.试用期过后,未付费的用户仍然可以继续使 ...

  10. Element-ui 下拉列表 选项过多时通过自定义搜索来解决卡顿问题

    当使用Select选择器时,如果下拉列表的数据量太多,会有一个明显的卡顿体验,例如: <!DOCTYPE html> <html lang="en"> &l ...