#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std; int pre[];
struct e{
int a, b;
};
e s1[];
e s2[]; int find(int x)
{
while (x != pre[x])
x = pre[x];
return x;
} int cmp(e a, e b){
if (a.a == b.a) return a.b>b.b;
else return a.a>b.a;
} void init(int n)
{
for (int i = ; i <= n; i++)
pre[i] = i;
} int main()
{
int t, cas = ;;
scanf("%d", &t);
while (t--)
{
for (int i = ; i<; i++)
{
s1[i].a = ; s1[i].b = ;
s2[i].a = ; s2[i].b = ;//最开始每个都是独立的,默认为链
}
bool flag = false;
int n1, m1, n2, m2; scanf("%d%d", &n1, &m1);
init(n1);
for (int i = ; i<m1; i++)
{
int a, b;
scanf("%d%d", &a, &b);
int dx = find(a);
int dy = find(b);
if (dx != dy)
{
pre[dx] = dy;
s1[dy].a += s1[dx].a;
s1[dx].a = ;//把拉手的孩子数量加起来,下同
}
else s1[dy].b = ;//否则在dy这个位置成环
} scanf("%d%d", &n2, &m2);
init(n2);
for (int i = ; i<m2; i++)
{
int a, b;
scanf("%d%d", &a, &b);
int dx = find(a);
int dy = find(b);
if (dx != dy)
{
pre[dx] = dy;
s2[dy].a += s2[dx].a;
s2[dx].a = ;
}
else s2[dy].b = ;
}
if (n1 == n2){ sort(s1 + , s1 + n1 + , cmp);
sort(s2 + , s2 + n2 + , cmp);//排序,若孩子的数量相同则对是否是环进行排序,这里要注意 for (int i = ; i<n1; i++)
if (s1[i].a != s2[i].a || s1[i].b != s2[i].b) {//判断数量,状态
flag = true;
break;
}
}
if (n1 != n2) flag = true; if (flag)
printf("Case #%d: NO\n", cas++);
else
printf("Case #%d: YES\n", cas++);
}
return ;
}

hdu3926 Hand in Hand 同构图的更多相关文章

  1. hdu 3926 Hand in Hand 同构图

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3926 In order to get rid of Conan, Kaitou KID disguis ...

  2. 2019牛客暑期多校训练营(第六场)E 构造、原图是补图的同构图

    https://ac.nowcoder.com/acm/contest/886#question 题意  问是否存在某个n个点的无向图G是其补图H的同构图,若存在输出G的邻接矩阵以及H关于G的映射. ...

  3. 同构图+思维构造——牛客多校第六场E

    考的其实是同构图的性质: 1.同构图的顶点数,边数相等 2.同构图通过点的映射后邻接矩阵相同 这篇博客讲的很好https://www.jianshu.com/p/c33b5d1b4cd9 本题还需要一 ...

  4. hdu3926(判断两个图是否相似,模版)

    题意:给你2个图,最大度为2.问两个图是否相似. 思路:图中有环.有链,判断环的个数以及每个环组成的人数,还有链的个数以及每个链组成的人数 是否相等即可. 如果形成了环,那么每形成一个环,结点数就会多 ...

  5. hdu3926 Hand in Hand 判断同构

    因为每个人小朋友只有两只手,所以每个点最多只有2度.图有可能是环.链,以及环和链构成的复杂图. 如何判断两幅图是否相似呢?判断相似是判断两幅图的圈的数量,以及构成圈的点数是否相同.还有判断链的数目和构 ...

  6. 【转】并查集&MST题集

    转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU]1213 How Many Tables 基础并查集★1272 小希的迷宫 基 ...

  7. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  8. hdu 3926 hands in hands

    https://vjudge.net/problem/HDU-3926 题意:有n个小朋友,他们之间手拉手,但是一只手只能拉一只手或者不拉,现在给出两个图,表示拉手关系,问这两个图是否同构.思路:一开 ...

  9. 【HDOJ图论题集】【转】

    =============================以下是最小生成树+并查集====================================== [HDU] How Many Table ...

随机推荐

  1. iOS开发之---判断是否是手机号

    iOS开发之---判断是否是手机号

  2. 简单的dp hdu 数塔(水题)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  3. (转)OutOfMemory时抓取heap 快照

    转自:https://testerhome.com/topics/579 首先说一下,在程序没有崩溃的时候如何抓取heap快照.这个大家应该都知道,在ddms中自带此功能.   见上图首先我们选中一个 ...

  4. POJ 2586 Y2K Accounting Bug(枚举大水题)

    Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10674   Accepted: 53 ...

  5. java的自定义异常类

    编写自定义异常类的模式 编写自定义异常类实际上是继承一个Exception标准异常类,用新定义的异常处理信息覆盖原有信息的过程.常用的编写自定义异常类的模式如下: public classCustom ...

  6. rpm的gpg key

    1 gpg 这是一种公钥.私钥机制. 2 rpm包的格式 rpm包由四部分构成,lead.signature.header和archive构成. 这里的签名(signature)是加密了的,也就是说, ...

  7. Android 源码架构

    我们都知道Android系统是一个开源工程,在网上可以下载到源代码. 一般在网上搜索一下,就会找到各种下载源代码的方法,比如使用Git和Repo,android源代码下载的网址是http://andr ...

  8. 包、修饰符、内部类、匿名内部类(java基础知识十)

    1.package关键字的概述及作用 * A:为什么要有包     * 将字节码(.class)进行分类存放  * B:包的概述     *   * C:包的作用     * 包名要定义在第一行,   ...

  9. CentOS7 安装jdk8

    1.下载jdk8 jdk-8u162-linux-x64.tar.gz 2.解压 tar -vxf jdk-8u162-linux-x64.tar.gz 3.进入 jdk1.8.0_162 文件夹 终 ...

  10. Swift语言学习(四)字符串与Array等集合的使用

    Swift 提供了C和Objective-C基础类型的自己一套版本,包括用于整型的Int,用于浮点值的Double和Float,用于布尔值的Boolean,和用于文本数据的String.Swift还提 ...