https://vjudge.net/problem/HDU-3926

题意:
有n个小朋友,他们之间手拉手,但是一只手只能拉一只手或者不拉,现在给出两个图,表示拉手关系,问这两个图是否同构。
思路:
一开始被同构难住了,后来思考发现,每一个联通分量只能是一条链或者一个简单的环,这样就比较好判断了。利用并查集统计每一个连通分量中的点,然后判断类型,判断类型的时候用度数是否为1来判断是否为链,然后将每一个连通分量先根据大小,再根据类型进行排序,最后把两个图进行一个比较即可。

 #include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std; int fao[],fat[],d[];
vector<int> g[],v[]; struct node
{
int ty,sz;
}; node disc1[],disc2[]; void init1(int n)
{
for (int i = ;i <= n;i++)
{
fao[i] = i;
}
} void init2(int n)
{
for (int i = ;i <= n;i++)
fat[i] = i;
} int fin1(int x)
{
if (x == fao[x]) return x;
else return fao[x] = fin1(fao[x]);
} int fin2(int x)
{
if (x == fat[x]) return x;
else return fat[x] = fin2(fat[x]);
} void unit1(int x,int y)
{
x = fin1(x);
y = fin1(y); if (x != y) fao[x] = y;
} void unit2(int x,int y)
{
x = fin2(x);
y = fin2(y); if (x != y) fat[x] = y;
} int dfs1(int n)
{
for (int i = ;i < g[n].size();i++)
{
int t = g[n][i]; if (d[t] == ) return ;
} return ;
} int dfs2(int n)
{
for (int i = ;i < v[n].size();i++)
{
int t = v[n][i]; if (d[t] == ) return ;
} return ;
} bool cmp(node aa,node bb)
{
if (aa.sz == bb.sz)
return aa.ty < bb.ty;
return aa.sz < bb.sz;
} int main()
{
int t; scanf("%d",&t); int cas = ; while(t--)
{
memset(v,,sizeof(v));
memset(g,,sizeof(g));
memset(disc1,,sizeof(disc1));
memset(disc2,,sizeof(disc2));
memset(d,,sizeof(d)); int n,m; scanf("%d%d",&n,&m); init1(n); for (int i = ;i < m;i++)
{
int x,y; scanf("%d%d",&x,&y); d[x]++;
d[y]++; unit1(x,y);
} for (int i = ;i <= n;i++)
{
g[fin1(i)].push_back(i);
} int cnt1 = ; for (int i = ;i <= n;i++)
{
if (g[i].size() != )
{
disc1[cnt1].sz = g[i].size();
disc1[cnt1].ty = dfs1(i);
cnt1++;
}
} scanf("%d%d",&n,&m); init2(n); int cnt2 = ; memset(d,,sizeof(d)); for (int i = ;i < m;i++)
{
int x,y; scanf("%d%d",&x,&y); d[x]++;d[y]++; unit2(x,y);
} for (int i = ;i <= n;i++)
v[fin2(i)].push_back(i); for (int i = ;i <= n;i++)
{
if (v[i].size() != )
{
disc2[cnt2].sz = v[i].size();
disc2[cnt2].ty = dfs2(i);
cnt2++;
}
} sort(disc1,disc1 + cnt1,cmp);
sort(disc2,disc2 + cnt2,cmp); bool ff = ; if (cnt1 != cnt2) ff = ; for (int i = ;i < cnt1;i++)
{
if (disc1[i].sz != disc2[i].sz) ff = ;
if (disc1[i].ty != disc2[i].ty) ff = ;
} if (ff) printf("Case #%d: NO\n",++cas);
else printf("Case #%d: YES\n",++cas);
} return ;
}

hdu 3926 hands in hands的更多相关文章

  1. HDU 3926 并查集 图同构简单判断 STL

    给出两个图,问你是不是同构的... 直接通过并查集建图,暴力用SET判断下子节点个数就行了. /** @Date : 2017-09-22 16:13:42 * @FileName: HDU 3926 ...

  2. HDU 3926 图的同构

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3926 题意:给定2个顶点度最大为2的无向图.问你这2个无向图是否同构. 思路: 1.最大度为2.说明这 ...

  3. hdu 3926 Hand in Hand 同构图

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

  4. hdu 3926 Hand in Hand

    http://acm.hdu.edu.cn/showproblem.php?pid=3926 这道题是判断两个图是不是同构相似.只要判断图中环的个数和链的个数,和每个环的节点数和链的节点数是否相等. ...

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

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

  6. hdu图论题目分类

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

  7. HDU图论题单

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

  8. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

随机推荐

  1. makefile介绍1.0

    1.gcc参数 -o指定生成文件名 -c只编译不链接 2.makefile标准格式 CC=gcc #编译器变量,#代表注释 SRCS=main.cpp\#源文件变量 a.cpp\ b.cpp\ c.c ...

  2. shell脚本中$参数的介绍

    $$Shell本身的PID(ProcessID)$!Shell最后运行的后台Process的PID$?最后运行的命令的结束代码(返回值)$-使用Set命令设定的Flag一览$*所有参数列表.如&quo ...

  3. PowerShell管道入门,看看你都会不(管道例子大全)

    PowerShell的一个重中之重的功能就是管道(pipeline),本文从浅入深,一步一步详解管道的使用方法和例子,来看看有没有你所不知道的吧,如果全知道,恭喜你已经很厉害啦--适用于所有Power ...

  4. (转)Nginx的启动、停止与重启

    启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root@LinuxServer sbin]# /usr/local/nginx/sbin/nginx -c /us ...

  5. webuploader插件,我踩得坑

    我在目前的公司做的项目要么是原生写法去做项目,要么就是vue+webpack做项目,但是vue这部分只是用了模板template,vue其他的都没用. 有一个项目需要做上传图片的功能,老大扔给我一个插 ...

  6. 有关苹果无法导出p12证书的问题解决办法。

    原因一 所选类型选择错误.解决办法:左侧有两个分类,一个是钥匙串,一个是种类,要选择种类中的我的证书或者证书.然后在右侧证书列表中,右键导出即可. 原因二 使用钥匙串生成的证书有问题,格式为(cert ...

  7. Solr集群搭建

    SolrCloud需要solr基于zookeeper部署,zookeeper是一个集群管理软件,由于SolrCloud需要由多台服务器组成.由zookeeper来进行协调管理.Zookeeper是一个 ...

  8. Spring+SpringMVC+MyBatis深入学习及搭建(十四)——SpringMVC和MyBatis整合

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7010363.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十三)--S ...

  9. 自定义分布式RESTful API鉴权机制

    微软利用OAuth2为RESTful API提供了完整的鉴权机制,但是可能微软保姆做的太完整了,在这个机制中指定了数据持久化的方法是用EF,而且对于用户.权限等已经进行了封装,对于系统中已经有了自己的 ...

  10. 安装旧版的docker-engine-1.12.6

    执行kubeadm init --api-advertise-addresses=172.16.160.211命令的时候,提示docker版本太新了 想要安装旧版docker,可以使用以下方法: yu ...