Connected Graph

POJ - 1737

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 题意:求n个点的联通图个数 sol:就是所有图-不连通的个数,令P[i]表示i个点的图的所有情况,那么P[i]=2i*(i-1)/2,Ans[i]表示答案
枚举j∑(1,i-1)表示节点1所在的联通块大小,Ans[i]=P[i]-Ans[j]*C(i-1,j-1)*P[i-j]
#include <string>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=; bool f=; char ch=' ';
while(!isdigit(ch)) {f|=(ch=='-'); ch=getchar();}
while(isdigit(ch)) {s=(s<<)+(s<<)+(ch^); ch=getchar();}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<) {putchar('-'); x=-x;}
if(x<) {putchar(x+''); return;}
write(x/); putchar((x%)+'');
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int power=,Base=;
struct Int
{
int a[];
Int() {memset(a,,sizeof a);}
Int(int x)
{
memset(a,,sizeof a);
// cout<<"x="<<x<<endl;
while(x>)
{
a[++a[]]=x%Base; x/=Base;
}
}
inline void print()
{
int i;
write(a[a[]]);
for(i=a[]-;i>=;i--)
{
if(a[i]<) putchar('');
if(a[i]<) putchar('');
if(a[i]<) putchar('');
write(a[i]);
}
}
}Bin[],C[][],Ans[];
#define P(x) x.print(),putchar(' ')
#define Pl(x) x.print(),putchar('\n')
inline Int operator+(Int p,Int q)
{
int i; Int res=p; res.a[]=max(p.a[],q.a[]);
for(i=;i<=q.a[];i++)
{
res.a[i]+=q.a[i];
res.a[i+]+=res.a[i]/Base;
res.a[i]%=Base;
}
while(res.a[res.a[]+]) res.a[]++;
return res;
}
inline Int operator-(Int p,Int q)
{
int i; Int res=p;
for(i=;i<=q.a[];i++)
{
res.a[i]-=q.a[i];
if(res.a[i]<)
{
res.a[i+]--; res.a[i]+=Base;
}
}
while(!res.a[res.a[]]) res.a[]--;
return res;
}
inline Int operator*(Int p,int q)
{
int i; Int res=p;
for(i=;i<=res.a[];i++) res.a[i]*=q;
for(i=;i<=res.a[];i++)
{
res.a[i+]+=res.a[i]/Base; res.a[i]%=Base;
}
while(res.a[res.a[]+])
{
res.a[]++; res.a[res.a[]+]+=res.a[res.a[]]/Base; res.a[res.a[]]%=Base;
}
return res;
}
inline Int operator*(Int p,Int q)
{
int i,j; Int res; res.a[]=p.a[]+q.a[];
for(i=;i<=p.a[];i++) for(j=;j<=q.a[];j++)
{
res.a[i+j-]+=p.a[i]*q.a[j];
res.a[i+j]+=res.a[i+j-]/Base;
res.a[i+j-]%=Base;
}
while(!res.a[res.a[]]) res.a[]--;
return res;
}
int main()
{
// freopen("data.in","r",stdin);
int i,j,n;
Bin[]=Int(); for(i=;i<=;i++) Bin[i]=Bin[i-]*;
// for(i=1;i<=32;i++) Pl(Bin[i]);
C[][]=Int();
for(i=;i<=;i++)
{
C[i][]=Int();
for(j=;j<=i;j++) C[i][j]=C[i-][j]+C[i-][j-];
}
// for(i=0;i<=4;i++)
// {
// for(j=0;j<=i;j++) P(C[i][j]);
// puts("");
// }
Ans[]=Int();
for(i=;i<=;i++)
{
Ans[i]=Bin[i*(i-)/];
for(j=;j<i;j++)
{
Ans[i]=Ans[i]-Ans[j]*C[i-][j-]*Bin[(i-j)*((i-j)-)/];
}
}
for(;;)
{
R(n); if(n==) break; Pl(Ans[n]);
}
return ;
}
/*
input
1
2
3
4
0
output
1
1
4
38
*/
 

poj1737的更多相关文章

  1. 【poj1737】 Connected Graph

    http://poj.org/problem?id=1737 (题目链接) 题意 求n个节点的无向连通图的方案数,不取模w(゚Д゚)w Solution 刚开始想了个第二类斯特林数,然而并不知道怎么求 ...

  2. POJ1737 Connected Graph

    Connected Graph Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3156   Accepted: 1533 D ...

  3. 【Java】【高精度】【组合数】【递推】poj1737 Connected Graph

    http://blog.csdn.net/sdj222555/article/details/12453629 这个递推可以说是非常巧妙了. import java.util.*; import ja ...

  4. [poj1737]Connected Graph(连通图计数)

    题意:输出题中带有$n$个标号的图中连通图的个数. 解题关键: 令$f(n)$为连通图的个数,$g(n)$为非联通图的个数,$h(n)$为总的个数. 则$f(n) + g(n) = h(n)$ 考虑标 ...

  5. $Poj1737\ Connected\ Graph$ 计数类$DP$

    AcWing Description 求$N$个节点的无向连通图有多少个,节点有标号,编号为$1~N$. $1<=N<=50$ Sol 在计数类$DP$中,通常要把一个问题划分成若干个子问 ...

  6. OJ题目分类

    POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...

  7. 【bzoj3456】城市规划(多项式求逆+dp)

    Description 求\(~n~\)个点组成的有标号无向连通图的个数.\(~1 \leq n \leq 13 \times 10 ^ 4~\). Solution 这道题的弱化版是poj1737, ...

  8. 0x5C 计数类DP

    cf 559C 考虑到黑色的格子很少,那么我把(1,1)变成黑色,然后按每个黑色格子接近终点的程度排序,计算黑色格子不经过另一个黑色格子到达终点的方案,对于当前的格子,要减去在它右下角的所有方案数(注 ...

  9. 【2018.10.4】CXM笔记(图论)

    .1.给你一个无向图,问这张图的最小割是否唯一.输出yes或no. 跑一边最大流,那么最小割的那些正向边一定满流(也就是过不了了).所以在残余网络上,从S到T和从T到S各广搜找一组最小割的边(即正向边 ...

随机推荐

  1. S02_CH04_User_IP实验Enter a post title

    S02_CH04_User_IP实验 4.1 创建IP 在之前的教程中,我们通过MIO与EMIO来控制LED,所使用的也是官方的IP,实际当中,官方提供的IP不可能涵盖到方方面面,用户需要自己编写硬件 ...

  2. 不吹不黑,赞一下应用运维管理的cassacdra

    不吹不黑的为菊厂的应用运维管理AOM点个赞.Why? 某菊厂应用运维管理工具AOM每天处理着亿级条数据,这么多数据是怎么存储的呢? 说到数据存储就会想到关系型数据库,比如mysql,oracle,sy ...

  3. BurpSuite 爆破网页后台登陆

    由于 Burp Suite是由Java语言编写而成,所以你需要首先安装JAVA的运行环境,而Java自身的跨平台性,使得软件几乎可以在任何平台上使用.Burp Suite不像其他的自动化测试工具,它需 ...

  4. 排序之希尔排序(JS)

    希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该 ...

  5. 基于bootstrap selectpicker ,实现select下拉框模糊查询功能

    1.html代码块 需要引入bootstrap的css js jquery bootstrap.css bootstrap-select.min.css jquery-1.11.3.min.js bo ...

  6. promise, async和await

    最开始实现异步的方法:回调函数 method1(function(err, result) { if (err) { throw err; } method2(function(err, result ...

  7. JS写斐波那契数列的几种方法

    斐波那契数,指的是这样一个数列:1.1.2.3.5.8.13.21.……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字 ...

  8. web储存的初级运用

    <html> <head> <meta charset="utf-8"> <title>web存储</title>< ...

  9. Jerry Wang在SAP社区上获得的徽章

    要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  10. python监控CPU/内存/磁盘,超过指定百分比,发送邮件

    #!/usr/bin/python #coding:utf-8 #导入psutil模块 import psutil import yagmail def mail(subject,contents): ...