题意:给你2个图,最大度为2.问两个图是否相似。

思路:图中有环、有链,判断环的个数以及每个环组成的人数,还有链的个数以及每个链组成的人数 是否相等即可。

如果形成了环,那么每形成一个环,结点数就会多增加1,如果没形成环,那么结点数就会是一样,根据这里,引入set来写,会轻松很多。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<set>
#include<algorithm>
using namespace std;
int father[100000],p[100000],sum[100000];
int find(int x)
{
int i=x,root;
while(x!=father[x])
x=father[x];
root=x;
x=i;
while(x!=father[x])
{
i=father[x];
father[x]=root;
sum[root]=sum[root]+sum[x];
p[root]=p[root]+p[x];
sum[x]=0;
p[x]=0;
x=i;
}
return root;
}
void liantong(int x,int y)
{
if(x!=y)
{
father[x]=y;
sum[y]+=sum[x];
p[y]+=p[x];
sum[x]=0;
p[x]=0;
}
else
{
p[x]++;
}
}
int main()
{
int text,f=1;
scanf("%d",&text);
while(text--)
{
set<int>cir,li;
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<=n;i++)
{
father[i]=i;
p[i]=1;
sum[i]=1;
}
for(int i=1;i<=m;i++)
{
int tmp,tmp1;
scanf("%d%d",&tmp,&tmp1);
if(tmp==tmp1) continue;
tmp=find(tmp);
tmp1=find(tmp1);
liantong(tmp,tmp1);
}
for(int i=1;i<=n;i++)
{
if(p[i]==sum[i])
{
li.insert(p[i]);
}
else
{
cir.insert(p[i]);
}
}
int ans1=li.size(),ans2=cir.size();
scanf("%d%d",&n,&m);
for(int i=0;i<=n;i++)
{
father[i]=i;
p[i]=1;
sum[i]=1;
}
for(int i=1;i<=m;i++)
{
int tmp,tmp1;
scanf("%d%d",&tmp,&tmp1);
if(tmp==tmp1) continue;
tmp=find(tmp);
tmp1=find(tmp1);
liantong(tmp,tmp1);
}
for(int i=1;i<=n;i++)
{
if(p[i]==sum[i])
{
li.insert(p[i]);
}
else
{
cir.insert(p[i]);
}
}
//printf("%d %d\n%d %d\n",ans1,ans2,cir.size(),li.size()); if(cir.size()==ans2&&li.size()==ans1)
printf("Case #%d: YES\n",f++);
else
printf("Case #%d: NO\n",f++);
}
return 0;
}

hdu3926(判断两个图是否相似,模版)的更多相关文章

  1. OpenCV——直方图计算、寻早最值位置和对比匹配(判断两幅图的相似程度)

  2. Javscript轮播 支持平滑和渐隐两种效果(可以只有两张图)

    原文:Javscript轮播 支持平滑和渐隐两种效果(可以只有两张图) 先上两种轮播效果:渐隐和移动   效果一:渐隐 1 2 3 4 效果二:移动 1 2 3 4 接下来,我们来大致说下整个轮播的思 ...

  3. You can Solve a Geometry Problem too (hdu1086)几何,判断两线段相交

    You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3276 ...

  4. Oracle判断两个时间段是否相交

    SQL中常常要判断两个时间段是否相交,该如何判断呢?比如两个时间段(S1,E1)和(S2,E2).我最先想到的是下面的方法一.方法一:(S1 BETWEEN S2 AND E2) OR (S2 BET ...

  5. 9-2、大型项目的接口自动化实践记录----递归判断两个json串是否相等

    1.已知json串构成的情况下判断 先构造一下场景,假设已经把各个数据都移除掉不对比的字段 图1 预期.实际结果,复杂接口返回多层嵌套json时,同下 图2 预期.实际结果值为:{child_json ...

  6. 简单地判断判断两矩形相交/重叠 C#

    最近需要用到矩形相交算法的简单应用,所以特地拿一个很简单的算法出来供新手参考,为什么说是给新手的参考呢因为这个算法效率并不是很高,但是这个算法只有简简单单的三行.程序使用了两种方法来判断是否重叠/相交 ...

  7. 如何判断两个IP地址是不是处于同一网段?

    个人理解,欢迎指正. 一.要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果-->网络号,如果网络号相同, 就在同一子网,否则,不在同一子网. 例:假定选 ...

  8. UVa 1671 语言的历史——判断两个DFA是否等价

    题意 一个DFA可以用一个5元组  $((Q, \sum , \delta , q_0, F))$ 表示,其中 $Q$ 为状态集,$\sum$ 为字母表,$\delta$ 为转移函数,$q_0$ 为起 ...

  9. 一句话+两张图搞定JDK1.7HashMap,剩下凑字数

    JDK1.7 HashMap一探究竟 HashMap很简单,原理一看散列表,实际数组+链表;Hash找索引.索引若为null,while下一个.Hash对对碰,链表依次查.加载因子.75,剩下无脑扩数 ...

随机推荐

  1. 【基础】centos 6.X 下修改图形界面为命令行界面(单用户救援模式)

    1. Linux开机引导的时候,按键盘上的e 就可以进入进入GRUB菜单界面. 2.在出现GRUB引导画面时(CentOS(2.6.18-274**)),按字母e键,进入GRUB编辑状态: 3.把光标 ...

  2. VS2010启动多个实例调试

    项目中经常出现一个解决方案里面有多个程序,如果想按F5启动多个实例进行操作调试那该怎么操作呢? 以前自己都使用附加进程的方法调试,这样的调试不需要按F5,自己只要运行多个程序后,使用vs的附加进程到对 ...

  3. mysql insert if not exists防止插入重复记录的方法(转)

    MySQL 当记录不存在时插入(insert if not exists) 在 MySQL 中,插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当 ...

  4. git使一个非仓库型的工程可以推送

    git config receive.denycurrentbranch false

  5. eclipse插件安装的四种方法

    Eclipse插件的安装方法 1.在eclipse的主目录(ECLIPSE_HOME,比如在我的机器上安装的目录是:D:\eclipse)有一个plugins的目录,这种方法的插件安装非常简单,只要将 ...

  6. com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1169 > 1024)

    ### Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1169 > 1024). You ...

  7. vmware虚拟机三种网络连接方式

    一.概述 vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式).NAT(网络地址转换模式).Host-Only(仅主机模式). 打开vmware虚拟机,我们可以在选项栏的“ ...

  8. FreeSWITCH取消Digest校验流程

    方法一.通过使用acl配置 <list name="domains" default="deny"> <!-- domain= is spec ...

  9. 基于TransactionScope类的分布式隐式事务

    System.Transactions 命名空间中除了上一节中提到的基于 Transaction 类的显式编程模型,还提供使用 TransactionScope 类的隐式编程模型,它与显示编程模型相比 ...

  10. python md5 问题(TypeError: Unicode-objects must be encoded before hashing)

    import hashlib import sys def md5s(): m=hashlib.md5() strs=sys.argv[1] m.update(strs.encode("ut ...