hdu1272 小希的迷宫 基础并查集

 1 #include <iostream>
 2 #include <cstdlib>
 3 #include <cstdio>
 4 #include <algorithm>
 5 using namespace std;
 6
 7 const int M = 100005;
 8 int a, b;
 9 int father[M];       //记录父节点
10 bool circle;         //判断是否存在环
11 bool visit[M];       //用来记录顶点数
12 int edgenum, vnum;    //分别表示边数,顶点数
13
14 void initial()
15 {
16     for (int i = 0; i<M; i++)
17         father[i] = i, visit[i] = false;
18     circle = false;
19     edgenum = vnum = 0;
20 }
21
22 //(查)
23 int find(int x)
24 {
25     return x == father[x] ? x : father[x] = find(father[x]);     //找祖先节点 + 路径压缩
26 }
27
28 //(并)
29 void merge(int a, int b)
30 {
31     if (a == b)
32         circle = true;
33     int x, y;
34     x = find(a);
35     y = find(b);
36     if (x != y)
37     {
38         father[x] = y;
39         edgenum++;       //引出一条边
40     }
41     else
42         circle = true;   //x==y,说明他们是同一个祖先,一旦连通便与祖先3者成环
43 }
44
45 int main()
46 {
47     while (true)
48     {
49         initial();
50         scanf("%d%d", &a, &b);
51         if (a == 0 && b == 0)
52         {     //为空树
53             printf("Yes\n");
54             continue;
55         }
56         if (a == -1 && b == -1)
57             break;
58         visit[a] = true;
59         visit[b] = true;
60         merge(a, b);
61         while (true)
62         {
63             scanf("%d%d", &a, &b);
64             if (a == 0 && b == 0)
65                 break;
66             visit[a] = true;
67             visit[b] = true;
68             merge(a, b);
69         }
70         for (int i = 0; i < M; i++)
71         {
72             if (visit[i])
73                 vnum++;
74         }
75         if (!circle && edgenum + 1 == vnum)
76             printf("Yes\n");
77         else
78             printf("No\n");
79     }
80     return 0;
81 }
时间: 2024-10-10 15:42:10

hdu1272 小希的迷宫 基础并查集的相关文章

HDU1272 小希的迷宫 (并查集)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 注意问题: 1.不能成环,即每次输入的两个数的根节点不能相同: 2.只有一个迷宫,即根节点数目唯一: 3.注意当只输入"0 0" 时要输出"Yes": 4.状态压缩用递归回栈溢出. 参考代码: #include<stdio.h> int fa[100001]; int find(int u) { int s; s=u; while (fa[u]!=u)

HDU-1272 小希的迷宫 (并查集、判断图是否为树)

Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房 间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走 了回头路).小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路.比如下面的例子,前两个是符合条件的,但是最后

HDU 1272: 小希的迷宫(并查集)

小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 25010    Accepted Submission(s): 7683 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是

HDU1272:小希的迷宫(并查集)

小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 67049    Accepted Submission(s): 21037 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 Description: 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也

1272小希的迷宫 【并查集】

Problem Description上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路).小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路.比如下面的例子,前两个是符合条件的

hdu 1272 小希的迷宫(简单并查集)

小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 31396    Accepted Submission(s): 9726 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是

HDU 1272小希的迷宫(并查集之二)

问题描述: Problem Description 上 次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房 间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走 了回头路).小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路.比如下面的例子

HDOJ1272 小希的迷宫 【并查集】

小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 23829    Accepted Submission(s): 7314 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是

HDU 1272 小希的迷宫(并查集,判断是否成环)

小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 41583    Accepted Submission(s): 12822 Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该