http://www.elijahqi.win/2018/01/14/poj1737-connected-graph/ ‎

Description
An undirected graph is a set V of vertices and a set of E∈{V*V} edges.An undirected graph is connected if and only if for every pair (u,v) of vertices,u is reachable from v.
You are to write a program that tries to calculate the number of different connected undirected graph with n vertices.
For example,there are 4 different connected undirected graphs with 3 vertices.

Input
The input contains several test cases. Each test case contains an integer n, denoting the number of vertices. You may assume that 1<=n<=50. The last test case is followed by one zero.

Output
For each test case output the answer on a single line.

Sample Input

1
2
3
4
0

Sample Output

1
1
4
38

Source
LouTiancheng@POJ
必须膜icefox巨佬 真的太强啦qwq
这题很神 leoly:常说:输入一个数 输出一个数 是不是很妙啊
题意:求给N个节点 问n个节点全连通的个数有多少种
设f[n]表示n个节点我的连通图个数
怎么做 首先假设我需要将图分成两个只通过一条边连接的图那么两边我都可以用f[k],f[n-k]来表示状态 此时我两边各选一个代表将其固定下来 假设左边是k个右边是n-k个 那么左边满足连通 至少是我选定的那个点和其他k-1个点都有边这k-1个点怎么选 Ck−1n−2 C_{n-2}^{k-1}好了这样我强行钦定左边连通了 那么k个点连通的方案数我有了就是f[k]这是选出哪k个点 同时我还需要满足我这两个连通块是连通的那么我需要通过另外一个连通块内钦定的点相连 那么一共是2k−12^{k}-1种方案 因为不能不连通
最后总的递推式子写出
f[n]=∑n−1k=1f[k]∗f[n−k]∗Ck−1n−2∗(2k−1)f[n]=\sum_{k=1}^{n-1}f[k]*f[n-k]*C_{n-2}^{k-1}*(2^{k}-1) 得写高精orz

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 55
ll bin[N];
inline char gc(){static char now[1<<16],*S,*T;if (T==S){T=(S=now)+fread(now,1,1<<16,stdin);if (T==S) return EOF;}return *S++;
}
inline int read(){int x=0;char ch=gc();while(ch<'0'||ch>'9') ch=gc();while(ch<='9'&&ch>='0') x=x*10+ch-'0',ch=gc();return x;
}
struct bigint{ll d[N*N];int n;ll& operator[](int x){return d[x];}bigint(){memset(d,0,sizeof(d));n=0;}friend bigint operator+(bigint a,bigint b){bigint res;res.n=max(a.n,b.n);for (int i=1;i<=res.n;++i) res[i]=a[i]+b[i];for (int i=1;i<=res.n;++i) res[i+1]+=res[i]/10,res[i]%=10;if (res[res.n+1]) ++res.n;return res;}friend bigint operator*(bigint a,bigint b){bigint res;res.n=a.n+b.n-1;for (int i=1;i<=a.n;++i) for (int j=1;j<=b.n;++j) res[i+j-1]+=a[i]*b[j];for (int i=1;i<=res.n;++i) res[i+1]+=res[i]/10,res[i]%=10;while(res[res.n+1]) ++res.n,res[res.n+1]+=res[res.n]/10,res[res.n]%=10;return res;}friend bigint operator*(bigint a,ll b){bigint res;res.n=a.n;for (int i=1;i<=res.n;++i) res[i]=a[i]*b;for (int i=1;i<=res.n;++i) res[i+1]+=res[i]/10,res[i]%=10;while(res[res.n+1]) ++res.n,res[res.n+1]+=res[res.n]/10,res[res.n]%=10;return res;}
}f[N];
ll c[N][N];
inline void print(bigint a){for (int i=a.n;i;--i) printf("%lld",a[i]);puts("");
}
int main(){freopen("poj1737.in","r",stdin);for (int i=0;i<51;++i) bin[i]=1LL<<i;for (int i=0;i<=48;++i) c[i][0]=1;for (int i=1;i<=48;++i)for (int j=1;j<=i;++j) c[i][j]=c[i-1][j-1]+c[i-1][j];f[1].n=1;f[1][1]=1;f[2].n=1;f[2][1]=1;for (int i=3;i<=50;++i)for (int j=1;j<i;++j)f[i]=f[i]+f[j]*f[i-j]*(bin[j]-1)*c[i-2][j-1];//f[3]=f[2]*5;print(f[3]);while(1){int n=read();if (!n) return 0;print(f[n]);}return 0;
}

poj1737 Connected Graph相关推荐

  1. poj1737 Connected Graph(计数,组合数学,递推,高精)

    求n个点的连通图的个数f[n],带标号.有两种做法. 1.直接搞出f[n]的递推式. f[n]=∑k=1n−1f[k]∗f[n−k]∗Ck−1n−2∗(2k−1)f[n]=\sum\limits_{k ...

  2. 证明:每个有n个顶点的连通图都至少有n-1条边 Show that every connected graph with n vertices has at least n − 1 edges.

    Show that every connected graph with n vertices has at least n − 1 edges. 证明每个有n个顶点的连通图都至少有n-1条边 证明: ...

  3. POJ - 1737 Connected Graph,Java(计数类DP)

    POJ - 1737 Connected Graph C++高精太难写了,直接用Java的大整数会方便一点 常规方法 import java.io.*; import java.math.BigInt ...

  4. POJ 1737 Connected Graph (大数+递推)

    题目链接: http://poj.org/problem?id=1737 题意: 求 \(n\) 个点的无向简单(无重边无自环)连通图的个数.\((n<=50)\) 题解: 这题你甚至能OEIS ...

  5. POJ - 1737 Connected Graph

    题目来源:http://poj.org/problem?id=1737 设f[n]表示n个点的连通图的个数.可以考虑n个点组成的所有图的总方案数减去不连通的方案数得到最终结果. 总方案数为2^n*(n ...

  6. poj 1737 Connected Graph

    1.....  f(n)=2^(n*(n-1)/2)-∑i=1,i<nc(n-1,i-1)*f(i)*2^((n-i)*(n-i-1)/2);   反向求结果会超时 哇哇大哭 浪费了一下午时间. ...

  7. POJ 1737 Connected Graph(组合)

    题目链接:http://poj.org/problem?id=1737 题意:求n个点的连通图的个数. 思路:n个节点的完全图有C(n,2)条边.我们可以从中选0,1,2,--C(n,2)条,所以n个 ...

  8. [poj 1737] Connected Graph {高精度+动态规划}

    题目 http://poj.org/problem?id=1737 解题思路 设F[i]F[i]F[i]表示iii个节点的无向连通图个数,状态转移方程为: F[i]=2i∗(i−1)/2−∑j=1i− ...

  9. 算法:图(Graph)的遍历、最小生成树和拓扑排序

    背景 不同的数据结构有不同的用途,像:数组.链表.队列.栈多数是用来做为基本的工具使用,二叉树多用来作为已排序元素列表的存储,B 树用在存储中,本文介绍的 Graph 多数是为了解决现实问题(说到底, ...

最新文章

  1. Oracle:sqlplus查询出的中文是乱码问题的解决
  2. 【深度学习】神经网络知识专题总结
  3. java jconsole_java中jconsole命令的学习
  4. AI没有偏见?它们从人类的语言中学会了性别和种族歧视
  5. 数据结构----依据出栈顺序判断所需的最少栈空间
  6. 山东大学计算机应用基础期中测试,山东大学期末考试计算机应用基础模拟题三套题.pdf...
  7. python怎么定义全局变量_python中如何定义全局变量
  8. java遍历d盘所有文件夹_java遍历指定盘符的所有文件和文件夹
  9. node.js 与 nvm安装教程
  10. 网站服务器怎么查ipv4,服务器的ipv4地址怎么查
  11. 配置使用ATTINY85
  12. 【解决方法】如何压缩网页字体文件
  13. 网络上的罗刚·心灵之约
  14. 说出至少4种vue当中的指令和它的用法?
  15. Cisco 2960 3750交换机端口流量限速(QOS)
  16. 【考试】职称英语考试那些事儿
  17. Xero 系列文章分享-Xero Vs MYOB
  18. 英雄联盟比分直播网/APP定制开发英雄联盟数据源码
  19. 【笔记】三剑客之sed、grep sort uniq
  20. systemVerilog Assertion (SVA)断言语法

热门文章

  1. web前端-JS(DOM、BOM)
  2. ac和av的结构linux系统,基于nxp MCIMX6S6AVM08AC的汽车电子主板解析之软件系统等设置!...
  3. 视频版权,JavaScript阻止360浏览器
  4. Web端调用本地打印机-JS实现
  5. 安卓基于BLE的蓝牙开发入门
  6. GNU Radio入门之旅
  7. 数字孪生智慧医院:构建三维医疗管控系统
  8. 关于上传文件格式验证
  9. android view clip,ClipView 自定义 RadiusView,包含常用的 Layout 和 View,方便扩展 @codeKK Android开源站...
  10. windows配置JDK(winds10)