题意:Professor Hopper专门研究bug的生活习性,他表示若两只bugs的生活习性差别很大,则说明他们可能为不同的性别,但如果出现三只bugs的习性两两差别很大,则有可能出现同性恋的bug了。现在有n只bugs,和生活习性差别很大的m对bugs的编号,问这些bugs中,有没有可能出现同性恋者。题目中给出的数对比如(1 2 ,2 3 ,1 3)是表示交配关系的,而且交配的都默认为理解为异性,这里如果有矛盾的情况,就表明有同性恋存在。比如1和2是异性,2和3为异性,那就表明1和3是同性,但是给出的数对是1和3异性表明有矛盾存在,则有同性恋存在,则输出Suspicious bugs found。
代码如下:
#include<iostream>
using namespace std;
const int Max = 2005;
int n, m;
int parent[Max], opp[Max];
void make_set()
{
for(int x = 1; x <= n; x ++)
{
parent[x] = x;
opp[x] = 0;
}
}
int find_set(int x)
{
if(x != parent[x])
parent[x] = find_set(parent[x]);
return parent[x];
}
void union_set(int x, int y)
{
x = find_set(x);
y = find_set(y);
if(x == y)
return;
parent[y] = x;
}
int main()
{
int t, i, x, y;
scanf("%d", &t);
for(i = 1; i <= t; i ++)
{
scanf("%d %d", &n, &m);
make_set();
bool flag = false;
while(m--)
{
scanf("%d %d", &x, &y);
if(flag)
continue;
if(find_set(x) == find_set(y))
{ // 若x,y同在一个集合,则证明有同性的可疑。
flag = true;
}
if(opp[x] == 0 && opp[y] == 0)
{
opp[x] = y;//表明y是x的异性
opp[y] = x;
}
else if(opp[x] == 0)
{
opp[x] = y;
union_set(x, opp[y]);
}
else if(opp[y] == 0)
{
opp[y] = x;
union_set(y, opp[x]);
}
else
{
union_set(x, opp[y]);
union_set(y, opp[x]);
}
}
printf("Scenario #%d:\n", i);
if(flag)
printf("Suspicious bugs found!\n\n");
else
printf("No suspicious bugs found!\n\n");
}
return 0;
}
分享到:
相关推荐
poj2492 A Bug's Life并查集应用的扩展,希望可以给大家带来用处
* 并查集的高级应用:例如 poj1703、poj2492。 * KMP 算法:例如 poj1961、poj2406。 4. 搜索: * 最优化剪枝和可行性剪枝。 * 搜索的技巧和优化:例如 poj3411、poj1724。 * 记忆化搜索:例如 poj3373、poj...
- 并查集的高级应用:如`poj1703, poj2492`。 - **搜索** - 最优化剪枝和可行性剪枝:如`poj3411, poj1724`。 - **动态规划** - 复杂的动态规划:如`poj1191, poj1054`。 - 记录状态的动态规划:如`poj3254, ...
- poj2492 - **应用场景**:适用于图论中的连通性问题。 **4. 哈希表和二分查找** - **定义**:哈希表利用哈希函数实现快速查找;二分查找适用于有序数组。 - **示例题目**: - poj3349 - poj3274 - poj2151 -...
* 并查集的高级应用:POJ1703、POJ2492 * KMP算法:POJ1961、POJ2406 * 左偏树(可合并堆) 四、搜索 * 最优化剪枝和可行性剪枝 * 较为复杂的动态规划:POJ1191、POJ1054、POJ3280、POJ2029、POJ2948、POJ1925、...
ACM常用算法及其相应的练习题 本资源总结了 ACM 竞赛中常用的算法和相应的练习题... + poj1703, poj2492 * KMP算法 + poj1961, poj2406 四、搜索 * 最优化剪枝和可行性剪枝 * 搜索的技巧和优化 + poj3411, poj1724
2. 并查集的高级应用(poj1703, poj2492) 3. KMP 算法(poj1961, poj2406) 4. 左偏树(可合并堆) 四、搜索 1. 最优化剪枝和可行性剪枝 2. 较为复杂的动态规划(如动态规划解特别的施行商问题等) 3. 记录状态的...
- 示例题目:poj1703, poj2492 - **KMP算法** - 示例题目:poj1961, poj2406 #### 高级动态规划 1. **矩阵乘法** - 示例题目:poj1191, poj1054, poj3280, poj2029, poj2948, poj1925, poj3034 2. **四边形...
- **示例题目**: POJ 3267, POJ 1836, POJ 1260, POJ 2533, POJ 3176, POJ 1080, POJ 1159 - **注意事项**: 理解每种模型的状态定义和转移方程。 #### 六、数学 **1. 组合数学** - **定义**: 研究组合结构的...
- (poj1703, 2492):用于文本检索的强大工具。 6. **KMP算法**: - (poj1961, poj2406):高效的字符串匹配算法。 ### 十、进阶状态压缩 1. **状态压缩技巧**: - 如何高效地表示和压缩状态。 2. **状态压缩...
**案例1:Bug's Life(POJ 2492)** 题目描述了一个虫子交配的行为模式问题。Hopper教授想要验证一个假说:虫子的交配总是由两只性别不同的虫子来完成。在这个问题中,需要判断是否存在同性虫子间的交配行为。 ...
- **2056** 和 **2488** 这两个题目则提供了不同的挑战,特别是 **2492** 还提供了一个使用并查集的替代方案,这对于想要拓宽思路的学习者来说非常有用。 ### 第三类:贪心算法 #### 重要性: 贪心算法在很多问题...
1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1011 1012 1013 1014 ...2492 2503 2509 2513 2524 2528 2531 2533 2545 2553 2559 2564 2575 2576 2586 2591 2593 2594 2602 2623 2632 2656 2676 2680 2707 2750 ...
推荐题目如1011、1033、1129、2049、2056、2488、2492等,其中2492可以考虑使用并查集解决。 3. **贪心**(Greedy) 贪心算法在每一步选择局部最优解,期望达到全局最优。推荐题目有1065、2054、1521、2709等,...
5. **后缀树/后缀数组**(如poj1703, 2492):用于字符串的高效处理,适用于文本索引、生物信息学等领域。 6. **KMP算法**(如poj1961, poj2406):高效的字符串匹配算法,适用于文本检索、模式识别等领域。 #### ...
2. **搜索算法**:包括深度优先搜索(DFS)和广度优先搜索(BFS),如1011、1033、1129、2049和2056等,其中2488和2492难度较高,可以挑战。 3. **贪心算法**:贪心策略是在每一步选择中都采取当前状态下最好或最优...
- **HDU 2492**:使用树状数组进行处理,计算出前面比它大、比它小、后面比它大、比它小的数,然后进行乘法运算。 - **POJ 3225**:涉及到区间扩大两倍表示点和线段,还需要支持异或操作和覆盖操作。解决此类问题的...