POJ:1737

POJ 1737 统计有n个顶点的连通图有多少个 (带标号) 设f(n)为所求答案 g(n)为n个顶点的非联通图 则f(n) + g(n) = h(n) = 2^(n * (n - 1) / 2) 其中h(n)是n个顶点的联图的个数 这样计算 先考虑1所在的连通分量包含哪些顶点 假设该连通分量有k个顶点 就有C(n - 1, k - 1)种集合 确定点集后,所在的连通分量有f(k)种情况。其他连通分量有 h(n - k)种情况 因此 阅读详情

楼教主男人八题中的第一题:
最大50座不同城市,组成全联通图的数量,不取模。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>

#define maxn 55

std::vector<long long> C[maxn][maxn];        // 组合数
std::vector<long long> P[maxn*maxn];        // 2的n次幂
bool Pc[maxn];                              // 幂级数染色
std::vector<long long> ans[maxn];       // 图的数量
bool ansc[maxn];        // ans染色
const long long BASE = 100000000;       // 进制

void print(const std::vector<long long> &x) {
    int l = x.size();
    if( l == 0) printf("0\n");
    else{
        printf("%lld",x[l-1]);
        for(int i = l - 2; i >= 0; i--){
            printf("%08lld",x[i]);
        }
        printf("\n");
    }
}

void assignment(std::vector<long long> &x,long long y){
    x.clear();
    while(y > 0){
        x.push_back(y % BASE);
        y /= BASE;
    }
}

void addv(std::vector<long long> &z,const std::vector<long long> &x,const std::vector<long long> &y){
    z.clear();
    for(long long i = 0, g = 0; ; i++){
        if( g == 0 && i >= x.size() && i >= y.size()) break;
        long long t = g;
        if( i < x.size()) t += x[i];
        if( i < y.size()) t += y[i];
        z.push_back(t % BASE);
        g = t / BASE;
    }
}

void minusv(std::vector<long long> &z,const std::vector<long long> &x,const std::vector<long long> &y){
    z.clear();
    long long g = 0;
    for(int i = 0; i < x.size() ; i++){
        long long t = 0;
        if(i < y.size()) t += y[i];
        if(x[i] - g < t){ z.push_back(BASE - t + x[i] - g); g = 1;}
        else{ z.push_back(x[i] - g - t); g = 0;}
    }
    int loc = (int)z.size() - 1;
    while(loc>=0&&loc<z.size()){
        if(z[loc--] == 0) z.pop_back();
        else break;
    }
}


void multilong(std::vector<long long> &z, long long x,const std::vector<long long> &y){
    z.clear();
    long long t = 0;
    for(int i = 0; i < y.size(); i++){
        t += y[i] * x;
        z.push_back( t % BASE );
        t /= BASE;
    }
    if(t!=0) z.push_back(t);
}

void multi(std::vector<long long> &z,const std::vector<long long> &x,const std::vector<long long> &y){
    z.clear();
    std::vector<long long> t;
    std::vector<long long> zt;
    for(int i = 0; i < x.size(); i++){
        multilong(t,x[i],y);
        t.insert(t.begin(),i,0);
        addv(zt,t,z);
        z = zt;
    }
}

void f(int y);


// 2^(y*(y-2)/2)
void h(int y){
    if(!Pc[y]){
        std::vector<long long> p;
        assignment(P[y],1);
        assignment(p,2);
        std::vector<long long> Pt;
        for(int i = y*(y-1)/2; i > 0 ; i>>=1){
            if(i & 1){ multi(Pt,p,P[y]); P[y] = Pt;}
            multi(Pt,p,p);
            p = Pt;
        }
        Pc[y] = true;
    }
}

//
void g(std::vector<long long> &z,int y){
    std::vector<long long> x;
    std::vector<long long> t;
    for(int i = 1; i < y; i++){
        f(i);
        h(y-i);
        multi(x,P[y-i],ans[i]);
        multi(t,C[y-1][i-1],x);
        addv(x,z,t);
        z = x;
    }
}


void f(int y){
    if(!ansc[y]){
        std::vector<long long> gv;
        h(y);
        g(gv,y);
        minusv(ans[y],P[y],gv);
        ansc[y] = true;
    }
}

int main(){

    memset(C,0,sizeof(C));
    memset(ansc,0,sizeof(ansc));
    memset(Pc,0,sizeof(Pc));

    // 组合数
    for(int i = 1; i < 51; i++){
        assignment(C[i][0],1);
        assignment(C[i][i],1);
        for(int j = 1; j < i; j++){
            addv(C[i][j],C[i-1][j-1],C[i-1][j]);
        }
    }
    // 30ms


    //freopen("input.txt","r",stdin);
    //freopen("output0.txt","w",stdout);

    int n;
    while(scanf("%d",&n) != EOF && n){
        //double timeS = (double)clock();
        if(ansc[n]) print(ans[n]);
        else{ f(n); print(ans[n]);}
        //printf("time:%fms\n",(double)clock() - timeS);
    }

    return 0;
}
ACM 比赛 POJ的训练计划,,,非常不错,关键在于坚持 立即下载

相关推荐

ACM,poj1737

ACM poj1737,Connected Graph

POJ - 1737 Connected Graph

题目来源:http://poj.org/problem?id=1737 设f[n]表示n个点的连通图的个数。可以考虑n个点组成的所有图的总方案数减去不连通的方案数得到最终结果。 总方案数为2^n*(n-1)/2。 不连通的方案数: 考虑1号节点所处的联通块的节点个数,假设当前连通块内节点个数为k,那么该联通块的组成情况可能有f[k]*c[n-1][k-1]种,c表示组合数。其余节点共有...

No cost too great! 255

Tesseract OCR 字库训练教程:提高识别率进阶版

通过 Tesseract 字库训练,你可以提高 OCR 对特定文本或字体的识别能力。训练过程包括准备训练数据、生成标签文件、运行训练工具,以及将训练结果集成到实际项目中。虽然训练过程需要一些时间和精力,但对于需要高精度文本识别的场景来说,字库训练是非常有效的提升识别率的方法。

小蜗牛的珍贵百宝箱 1865

【计数类DP】POJ 1737

链接 http://poj.org/problem?id=1737 大意 给定nnn个点的无向联通图有多少个,节点有标号 思路 首先xjbxjbxjb乱想,我们就能想到dpdpdp,然后这题显然是一个计数类dpdpdp 因为是有标号的,所以一定和组合数有关,先算出组合再说 nnn个点的无向图总数显然是 2n×(n−1)22n×(n−1)22^{\frac{n\t...

Ajwallet 696

《探秘 BME680温度湿度气压气体传感器模块:环境感知的卓越之选》:此文为AI自动生成

BME680 是一款由博世公司推出的集成环境传感器模块,在环境监测和物联网等领域中发挥着重要作用。它能够同时测量温度、湿度、气压和气体浓度等多个环境参数,为各种应用提供准确可靠的环境数据。该模块采用小巧的封装形式,便于集成到各种设备中,无论是智能家居、可穿戴设备还是工业监测系统,都能轻松适配。例如,在智能家居系统中,BME680 模块可以监测室内环境参数,如温度、湿度、气压和空气质量等。通过与智能家居控制器或智能手机应用程序的连接,用户可以实时了解室内环境状况,并根据需要进行调整。

zheng_ruiguo的专栏 1865

ERA5获取的风场数据转换为.dfs2文件

ERA5获取风场数据的具体步骤可以参考下面的文章下载好后应该是.nc格式的文件,想要读取或者转换成其他格式的文件可以安装下面步骤,本文介绍如何转换为.dfs2文件。

我的博客 1459

POJ 1737 Connected Graph(高精度+跷跷板递推)

题目来源:http://poj.org/problem?id=1737Connected GraphTime Limit: 1000MS Memory Limit: 30000K Total Submissions: 3573 Accepted: 1727 DescriptionAn undirected graph is a set V of vertices and aset o...

da_kao_la的博客 425

云计算系统等保测评对象和指标选取

参考GBT22239-2019《基本要求》附录D 云计算应用场景说明。简要理解下图,主要是云计算系统安全保护责任分担原则和云服务模式适用性原则,指导后续的测评对象和指标选取。

ryanzzzzz的博客 4678

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

POJ - 1737 Connected Graph C++高精太难写了,直接用Java的大整数会方便一点 常规方法 import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.math.BigInteger; import java.util.Scanner; public class Main { static Scanner cin = new Scanner(System.in); st

00后的博客 581

华为OD机试 - 整型数组按照个位数排序(Java 双机位C卷 100分)

华为OD机试 双机位C卷题库疯狂收录中,刷题。

学Java,找哪吒 349

【人工智能】全面盘点国内AI九大模型:各擅胜场的智能先锋(豆包、文心一言、讯飞星火、通义千问、Kimi、智谱清言、腾讯元宝、秘塔、天工AI)

追求性价比与全能:选豆包,适合个人与中小企业日常使用;侧重中文创作与理解:选文心一言,文学与商业文案创作首选;需要专业语音交互:选讯飞星火,智能客服、车载场景必备;看重生态与多场景:选通义千问,适配电商、办公等企业需求;处理超长文本任务:选Kimi,文档分析、学术研究的利器;专注深度推理创作:选智谱清言,学术与创意写作的伙伴;依赖腾讯生态协同:选腾讯元宝,日常轻量需求的便捷之选;深耕法律学术领域:选秘塔,专业文本处理的权威工具;布局前沿技术体验:选天工AI,享受接近国际顶尖的智能服务。

奶爸的编程之路,也就一周冷个三天 1121

POJ 1737: Connected Graph 组合数学 高精度

Connected GraphTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 3459 Accepted: 1679DescriptionAn undirected graph is a set V of vertices and a set of E∈{V*V} edges.An undirected graph is conn...

BlackJack 778

DOTS 性能基石:为什么传统 Unity 代码难以满足现代游戏需求?(DOTS 系列教程 · 第1篇)

本文探讨了Unity游戏开发中的性能优化问题,指出性能问题不应在最后才考虑,而应贯穿整个开发过程。文章分析了性能问题的三大表现(渲染开销、物理模拟、游戏逻辑),并解释了依赖硬件升级的不可行性。重点剖析了传统Unity代码性能低下的六大根源:垃圾回收卡顿、编译器优化不足、多核利用不足、数据结构和代码缓存不友好、过度抽象等问题。最后指出Unity项目中常见的反模式,如主线程垄断、内存碎片化等,为后续学习DOTS高性能架构解决方案奠定基础。

分享知识,拥抱变化 150

Poj1737

Poj1737 题目连接: http://poj.org/problem?id=1737 题目大意: 给1<=n<=50个不同颜色的点,求使它们联通的不同方案数目. 分析: 感觉组合数学题目最重要的是不重不漏,找到划分的标准,首先想到从反面做,然后: 想法1: c(n,k)取出k个,这k个是联通的,剩下的随意,联通不联...

weixin_30387339的博客 124

量化交易 米筐 因子分组打分(成长因子)

分组动手练习 在米筐上因子数据没有处理,提供的很多因子没有默认分类,存在一些因子没有的情况,我们就选择一些常见的因子。 价值因子 质量因子 成长因子(历史名称) pe_ratio return_on_invested_capital in_revenue pcf_ratio du_return_on_equity inc_eps pb_ratio return_on_asset_net_profit inc_total_asset market_cap return_on_equ

廷益_飞鸟的博客 932

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

楼教主男人八题(第五题)

第五题啦。开始针对语言咧,用 Java 来搞会非常简单~ 题目链接 http://poj.org/problem?id=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.

Time_Limit的博客 252

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

poj1737 带标号连通图计数(DP)

时间限制:1秒 内存限制:128M 【问题描述】   统计有 n 个不同顶点的连通图有多少个,图的顶点有编号。如图上是 n=3 时的 4 种不同连通图的方案。     【输入格式】   输入包多组数据,每组数据仅一行一个整数n,表示标号图的顶点数目。【输出格式】   对于每组数据输出一行,表示答案 mod 10^9+7 的结果。【输入样例】 1 2 3 4 0 【输出样例】

细雨欣然 2109

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[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−1F[j]∗Ci−1j−1∗2(i−j)∗(i−j−1)/2\large F[i]=2^{i*(i-1)/2}-\sum_{j=1}^{i-1}F[j]*C_{i-1}^{j-1}*2^{(i-j)...

Nowed 367

poj 1737 Connected Graph

<br />//poj 1737 该题可用于求指定顶点数的无向连通图个数 <br />//膜拜这位仁兄的解题报告:http://hi.baidu.com/accplaystation/blog/item/51417bdca982bea4cc116660.html<br />#include <cstring><br />#include <iostream><br />#include <algorithm><br />using namespace std;<br />const int inf=1<<2

birdforever的专栏 1104

poj1737

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 reachabl...

weixin_30702413的博客 188

POJ 1737(男人八题之一组合问题)

今天做了传说中的男人八题的第一题... 这题是个组合问题,很容易想到逆着来,就是从n个点所有的连接方法中删去那些不能构成连通图的连法. 然后想法就是用f[i]记录i个点的连通图数目,然后递推. 具体来说,为了避免重复,选择一个固定点x,不管怎样,我们先选择x这个点,然后再从其他剩余的n-1个点中分别选0~n-2个点与x构成连通图.然后其他剩余的n-1~1个点他们之间的连接方法随意,...

diqiao3844的博客 217

poj1737(连通图计数)

链接: 题意: 代码:

stay_accept的专栏 1290

poj1737 Connected Graph

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 ev

Elijahqi 359

POJ 1737 Connected Graph (大数+递推)

题目链接: http://poj.org/problem?id=1737 题意: 求 \(n\) 个点的无向简单(无重边无自环)连通图的个数。\((n<=50)\) 题解: 这题你甚至能OEIS。 http://oeis.org/A001187 但不支持这样做。TAT 间接做。 总方案数减去不合法方案。 因为\(n\)个点的完全图有 \(C(n,2)={n(n-1) \over 2}\) 条...

weixin_30732487的博客 219

POJ 1737 Connected Graph(组合)

题目链接:http://poj.org/problem?id=1737 题意:求n个点的连通图的个数。 思路:n个节点的完全图有C(n,2)条边。我们可以从中选0,1,2,……C(n,2)条,所以n个结点的总方案数为2^C(n,2)。其中有不连通的情况。设与结点1在一个块中的点为k个,除1外的另外的k-1个点从n-1个点中选取,而包含1的k个结点是个连通图,所以有C(n-1, k-1) * f...

weixin_33978044的博客 204
上一篇: C++:const
下一篇: windows:用bat脚本删除指定后缀的文件
ShellDawn
博客等级 码龄10年 75粉丝 756原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值