题意:

  n个点,m1条边的图E1,n个点,m2条边的图E2。求图E2有多少子图跟图E1同构。

题解:

  用STL的全排列函数next_permutation()枚举映射。对于每一种映射枚举每一条边判断合法性。

  总情况数要除以图E1的自同构数去重。

#include <bits/stdc++.h>
using namespace std;
int n, m1, m2;
int u, v, d;
int ans;
int p[];
int a[][], b[][];
int main() {
while(~scanf("%d%d%d", &n, &m1, &m2)) {
d = ans = ;
memset(a, , sizeof(a));
memset(b, , sizeof(b));
for(int i = ; i <= m1; i++) {
scanf("%d%d", &u, &v);
a[u][v] = a[v][u] = ;
}
for(int i = ; i <= m2; i++) {
scanf("%d%d", &u, &v);
b[u][v] = b[v][u] = ;
}
for(int i = ; i <= ; i++) p[i] = i;
// 图E1的自同构
do {
int f = ;
for(int i = ; f && i <= n; i++)
for(int j = ; f && j <= n; j++)
if(a[i][j] && (!a[p[i]][p[j]])) f = ;
if(f) d++;
} while(next_permutation(p+, p+n+));
// 图E2和E1的同构
do {
int f = ;
for(int i = ; f && i <= n; i++)
for(int j = ; f && j <= n; j++)
if(a[i][j] && (!b[p[i]][p[j]])) f = ;
if(f) ans++;
} while(next_permutation(p+, p+n+));
printf("%d\n", ans/d);
}
}

最新文章

  1. WPF做12306验证码点击效果
  2. SSL安全证书-概念解析
  3. FineReport集成到AWS系统中的方案
  4. (01)javascript 数据类型
  5. java+tomcat(apr,native)
  6. spring+mybatis实现读写分离
  7. 在archlinux上搭建twitter storm cluster
  8. paper 69:Haar-like矩形遍历检测窗口演示Matlab源代码[转载]
  9. Java基础--继承方法调用顺序
  10. ibatis动态语句加and 和不加and
  11. 可以让PHP编程事半功倍的类库
  12. mybatis一对多,多对一
  13. 自学HTML的几个例子
  14. Common Lisp第三方库介绍 | (R "think-of-lisper" 'Albertlee)
  15. FZU 2168 防守阵地 I(前n项和的前n项和)
  16. 【Rsync项目实战】备份全网服务器数据
  17. Flask 学习 十二 用户评论
  18. zhifubao
  19. Fleck For Web Socket
  20. [数学杂志]AML

热门文章

  1. MIP缓存加速原理 MIP不仅仅只是CDN
  2. ruby Logger日志
  3. xampps 不能配置非安装目录虚拟主机解决方案
  4. java入门---基础语法&amp;基础常识&amp;编码规范&amp;命名规范
  5. CPU计算密集型和IO密集型
  6. 操作Excel的宏
  7. SQL On Streaming
  8. Linux-Qt Quick学习1-Hello world
  9. 在Android上,怎样与Kotlin一起使用Retrofit(KAD21)
  10. CSS3 : box-shadow