热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hdu3926HandinHand判断同构

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

  因为每个人小朋友只有两只手,所以每个点最多只有2度。图有可能是环、链,以及环和链构成的复杂图。  

  如何判断两幅图是否相似呢?判断相似是判断两幅图的圈的数量,以及构成圈的点数是否相同。还有判断链的数目和构成链的点数是否相同。

  具体实现:标记环(或者链),按照点的数目排序。如果点数相同,环排在前面。然后逐个判断,如果全部都相同,就是同构。

#include
#include

#include

#include

using namespace std;
const int N=10010;
struct node
{
int cnt;bool iscc;
}arr1[N],arr2[N];
int f[N],r[N],iscir[N];
bool cmp(const node &x, const node &y)
{
if(x.cnt!&#61;y.cnt) return x.cnt<y.cnt;if(x.isccreturn 1;return 0;
}
int Find(int x)
{
if(x&#61;&#61;f[x]) return x;return f[x]&#61;Find(f[x]);
}
void Link(int i,int j)
{
int a&#61;Find(i),b&#61;Find(j);if(a!&#61;b) {f[b]&#61;a;r[a]&#43;&#61;r[b];}else iscir[a]&#61;1;
}
void init()
{
for(int i&#61;0;i){f[i]&#61;i;iscir[i]&#61;0;r[i]&#61;1;}
}
int main()
{
//freopen("test.txt","r",stdin);int ca,k,i,j,x,y,n1,m2,n2,m1,a,b;k&#61;1;scanf("%d",&ca);while(ca--){scanf("%d%d",&n1,&m1);init();while(m1--){scanf("%d%d",&x,&y);Link(x,y);}a&#61;0;for(i&#61;1;i<&#61;n1;i&#43;&#43;){if(i&#61;&#61;Find(i)){arr1[a].cnt&#61;r[i];arr1[a&#43;&#43;].iscc&#61;iscir[i];}}scanf("%d%d",&n2,&m2);init();while(m2--){scanf("%d%d",&x,&y);Link(x,y);}b&#61;0;for(i&#61;1;i<&#61;n1;i&#43;&#43;){if(i&#61;&#61;Find(i)){arr2[b].cnt&#61;r[i];arr2[b&#43;&#43;].iscc&#61;iscir[i];}}printf("Case #%d: ",k&#43;&#43;);if(n2!&#61;n1||m2!&#61;m1){printf("NO\n");continue;}if(a&#61;&#61;b){sort(arr1,arr1&#43;a,cmp);sort(arr2,arr2&#43;a,cmp);for(i&#61;0;i){if(arr1[i].cnt!&#61;arr2[i].cnt) break;if(arr1[i].iscc!&#61;arr2[i].iscc) break;}if(i&#61;&#61;a) printf("YES\n");else printf("NO\n");}else printf("NO\n");}return 0;
}

 

转:https://www.cnblogs.com/Potato-lover/p/3930266.html



推荐阅读
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • hlg_oj_1116_选美大赛这题是最长子序列,然后再求出路径就可以了。开始写的比较乱,用数组什么的,后来用了指针就好办了。现在把代码贴 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 本文深入探讨了Go语言中的接口型函数,通过实例分析其灵活性和强大功能,帮助开发者更好地理解和运用这一特性。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • 本题要求计算一组正整数的最小公倍数(LCM)。输入包括多组测试数据,每组数据首先给出一个正整数n,随后是n个正整数。 ... [详细]
  • linux网络子系统分析(二)—— 协议栈分层框架的建立
    目录一、综述二、INET的初始化2.1INET接口注册2.2抽象实体的建立2.3代码细节分析2.3.1socket参数三、其他协议3.1PF_PACKET3.2P ... [详细]
  • Logging all MySQL queries into the Slow Log
    MySQLoptionallylogsslowqueriesintotheSlowQueryLog–orjustSlowLog,asfriendscallit.However,Thereareseveralreasonstologallqueries.Thislistisnotexhaustive:Belowyoucanfindthevariablestochange,astheyshouldbewritteninth ... [详细]
author-avatar
伟哥
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有