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. 学习笔记TF018:词向量、维基百科语料库训练词向量模型

    词向量嵌入需要高效率处理大规模文本语料库.word2vec.简单方式,词送入独热编码(one-hot encoding)学习系统,长度为词汇表长度的向量,词语对应位置元素为1,其余元素为0.向量维数很 ...

  2. python标准库]Hashlib

    hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法. 在学习hashlib模块之前,先来看 ...

  3. jsp+servlet实现模糊查询和分页效果

    ---恢复内容开始--- 1.DAO+MVC包 2.DAO接口方法定义 package com.wanczy.dao; import java.math.BigDecimal;import java. ...

  4. 【JAVAWEB学习笔记】网上商城实战5:后台的功能模块

    今日任务 完成后台的功能模块 1.1      网上商城的后台功能的实现: 1.1.1    后台的功能的需求: 1.1.1.1  分类管理: [查询所有分类] * 在左侧菜单页面中点击分类管理: * ...

  5. Spring的<context:property-placeholder.../>在junit中不起作用,失效,解决方法

    大家都知道,我们使用spring框架的时候喜欢把可以配置的变量放入一个properties配置文件中,然后在spring的applicationContext.xml配置文件中加入配置: <co ...

  6. ecshop收货地址货到付款修改

    用户选择某些地址时,支付方式里则可以依据此地址来对货到付款选项进行显示或隐藏.目前仅与顺丰合作,以顺丰提供的数据为准. 使用到的数据库分别如下: ecs_region//地方数据,PRIMARY KE ...

  7. Facebook开源Zstandard新型压缩算法代替Zlib 简单使用

    简介 Zstandard(缩写为Zstd)是由Facebook的Yann Collet开发的一个无损数据压缩算法.Zstandard在设计上与DEFLATE(.zip.gzip)算法有着差不多的压缩比 ...

  8. ex3多类问题和NN中的前向传播

    ​ 昨日去了趟无锡,前天下了暴雨,所以昨天给我的感觉天气很好,天蓝云白的,以后在这边学习估计也是一件很爽的事情,且昨日通知书业寄到学校了,附赠了一份研究生数学建模的传单,我搜了搜近几年的题目,感觉统计 ...

  9. 利用Jsoup包爬取网站内容

    一 Jsoup包 下载链接:http://download.csdn.net/detail/u014000832/7994245 二 爬取搜狐新闻网站标题等内容 package com.test1; ...

  10. POJ 1459-Power Network(网络流-最大流-ISAP)C++

    Power Network 时间限制: 1 Sec  内存限制: 128 MB 题目描述 A power network consists of nodes (power stations, cons ...