POJ 1639度限制生成树

最小度限制生成树 POJ1639 今天了解了一下最小度限制生成树。这个问题的本质依旧是生成树,但是对于某个点的度给定限制。也就是连到该点上的边不能超过限制的数量limit。 具体的解决过程和相关的证明可以看一下《最小生成树问题的扩展》这篇论文。这里简单讲一下解决问题的流程也方便我之后来复习。 1,用除去和有限制的点相连的以外的边做最小生成树。这个时候可能不能保证所有点都连通,那么可能会出现几个连通块。如果连通块的数量超过了限制 阅读详情

题目就是给出一些英文名称, 并且要求源点为park的入度不能超过k
给出思路:
1.首先抹去park, 在剩下的连通分量中求出最小生成树加入答案, 此时的度是最小的, 即如果现在的度大于k, 则无解(题目好像没这个情况)
2.由于我们一开始删去了和park相邻的每一条边, 所以我们要加上每个联通子图到park的最小边, 但这样并不是最好的, 我们要把度加到k, 这样会使答案更优(至于具体的操作, 留一点思考的空间, 也可以看我的代码)

#include <map>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

const int N = 150;
const int oo = 0x3f3f3f;
#define FILL(a, b) memset(a, b, sizeof(a))
#define rep(i, s, t) for(int i = s; i <= t; ++i)

map<string, int> id;
int insert(string s) {
    if(!id.count(s)) id[s] = id.size();
    return id[s];
}

struct Edge {
    int u, v, w;
}p[N];

struct Part_Prim {
    int G[N][N], n, m, limit, fa[N];
    int dis[N], vis[N], cnt, used[N][N];
    void init() {
        id.clear(); id["Park"] = 1; cnt = 0;
        rep(i, 1, N-1) rep(j, 1, N-1) G[i][j] = oo;
        FILL(vis, 0), FILL(used, 0), FILL(p, 0);
    }

    int prim(int s, int ret = 0, int add = oo) {
        int to_root = 0; ++cnt;
        rep(i, 0, n) dis[i] = oo;
        dis[s] = 0;
        rep(i, 1, n-1) {
            int k = 0;
            rep(j, 2, n) if(dis[k] > dis[j] && !vis[j]) k = j;
            if(!k) break;
            ret += dis[k]; vis[k] = cnt;
            if(add > G[k][1]) to_root = k, add = G[k][1];

            rep(j, 2, n) 
                if(G[k][j] < dis[j] && !vis[j]) 
                    dis[j] = G[k][j], fa[j] = k;
            if(fa[k]) used[k][fa[k]] = used[fa[k]][k] = 1;
        }
        used[1][to_root] = used[to_root][1] = 1;
        return ret + add;
    }

    void dfs(int u, int f) {
        rep(v, 2, n)
            if(used[u][v] && v ^ f) {
                p[v] = p[u];
                if(G[u][v] ^ oo && G[u][v] > p[v].w)
                    p[v] = (Edge) {u, v, G[u][v]};
                dfs(v, u);
            }
    }

    int parking(int ret = 0, int t = 0) {
        rep(i, 2, n) if(!vis[i]) ret += prim(i);
//      cout << ret << endl;
        while(cnt++ < limit) {
            dfs(1, 0);
            rep(i, 2, n) 
                if(G[1][i] ^ oo && !used[1][i] && p[i].w-G[1][i] > p[t].w-G[1][t]) 
                    t = i;
            ret -= p[t].w-G[1][t]; 
//          cout << p[t].w << "!" << endl;
            used[1][t] = used[t][1] = 1;
            used[p[t].u][p[t].v] = used[p[t].v][p[t].u] = 0;
        }
        return ret;
    }

    void solve(int _ = 0) {
        while(~scanf("%d", &_)) {
            init();
            while(_--) {
                string s1, s2; int w, u, v;
                cin >> s1 >> s2 >> w;
                u = insert(s1), v = insert(s2);
                G[u][v] = G[v][u] = w;
            }
            n = id.size();
            scanf("%d", &limit);
            printf("Total miles driven: %d\n", parking());
        }
    }
}WORK;

int main() {
#ifndef ONLINE_JUDGE
    freopen("IP.in", "r", stdin);
    freopen("OP.out", "w", stdout);
#endif
    WORK.solve();
    return 0;
}
使用网分对晶体ESR/L1/C1/C0进行测量计算 Use R&amp;S Vector Network Analyzer test XTAL ESR/L1/C1/C0 測量方法:使用儀器的Port1端口,測量XTAL的S11,通過諧振的參數計算出ESR/L1/C1/C0的值。 實際晶體的等效模型:通常方便晶體分析,使用下圖(b)的等效模型,但實際測量發現晶體存在多個串聯諧振點,實際等效模型更接近(c)。 儀器測量到的S11,其中M... 阅读详情

相关推荐

死磕GMSSL通信-java/Netty系列(二)

Netty-tcnative再linux编译比较好编译,但是再window编译,我尝试了各种办法,总是编译失败,所以我采用半自动的方式进行编译,Netty-tcnative会生成临时文件,直接用vs打开,设置openssl的头文件和静态库路径,然后生成静态库,静态库改个名字放到jar包里边,其实自动编译也是这个原理哈哈O(∩_∩)O。直接传输五个证书的路径吗,之前有的是说要转成x509之类的,转来转去的有点麻烦,这个是直接传输证书路径,由底层gmssl去解析,格式必须是pem格式。然而,若项目已依赖于。

qq_36577699的博客 3025

purfer编码解决生成树计数问题

之前接触过一张给定的图进行生成树计数----利用Matrix-Tree定理转化成kirchhoff矩阵,求n-1阶主子式的值即是答案。 那如果遇到给你一些点,直接问你生成树方案呢? 我考虑过这样做:把所有点之间连边,然后枚举每个点不同的度数(度数之和2n-2),求组成的所有kirchhoff矩阵主子式的和,但是当n足够大,比如超过100000,枚举的复杂度已经相当高了,还要n^3计算行

nikelong的博客 1883

HDMI协议介绍(二)--DataIsland Packets

前文简单介绍了HDMI传输的三个周期:控制周期、DataIsland周期和Video周期。DataIsland传输音频和辅助数据,这些数据以Packet的形式传输。本文简单介绍DataIsland Packet。

SlamDunk的博客 5671

生成生成树计数 --- Matrix-Tree定理(基尔霍夫矩阵树定理)

定理证明请点这,多看几遍就懂了模板题点这 题目大意: *一个有n座城市的组成国家,城市1至n编号,其中一些城市之间可以修建高速公路; *需要有选择的修建一些高速公路,从而组成一个交通网络; *计算有多少种方案,使得任意两座城市之间恰好只有一条路径; 模板 :#include<iostream> #include<cstdio> #include<cstring> #inclu

Anxdada -- 我等风来也等你 1603

基于eNSP的小型企业网络设计

在本次计算机网络课程设计中,围绕“小型企业网络搭建”这一主题,成功构建了一个高效、安全且易于管理的企业内部网络。通过本次课程设计,我们不仅掌握了小型企业网络搭建的关键技术和最佳实践,还培养了团队协作和问题解决的能力。本项目所构建的网络系统不仅满足了当前的业务需求,还具备良好的可扩展性和灵活性,为企业未来的数字化转型奠定了坚实的基础。

m0_67403143的博客 1442

卡方分布的前世今生:一个统计概念的演化史

本文追溯了卡方分布从19世纪末的理论雏形到现代统计推断核心工具的发展历程。从Karl Pearson的数学奠基到Ronald Fisher的理论完善,卡方分布在医学研究、社会科学和机器学习等领域展现出广泛应用。文章通过代码示例和性质分析,揭示了这一统计概念如何持续推动数据科学创新。

weixin_29251567的博客 390

生成树的计数Matrix-Tree定理

摘要          在信息学竞赛中,有关生成树的最优化问题如最小生成树等是我们经常遇到的,而对生成树的计数及其相关问题则少有涉及。事实上,生成树的计数是十分有意义的,在许多方面都有着广泛的应用。本文从一道信息学竞赛中出现的例题谈起,首先介绍了一种指数级的动态规划算法,然后介绍了行列式的基本概念、性质,并在此基础上引入Matrix-Tree定理,同时通过与一道数学问题的对比,揭示了该定理所包

1万+

同济大学C++mooc第五、六讲参考答案

同济大学C++moooc第5、6讲 第五讲 第一题 随机产生10个30~100(包括30,100)的正整数,求它们的最大值、最小值、平均值,并显示整个数组的值和结果。 代码片. // #include<iostream> const int n = 10; using namespace std; int main() { int s[n],i,j,t,sum=0; for (i = 0; i < n; i++)

cjzui6666的博客 1万+

[poj1639]度限制生成树

Problem DescriptionThe Contortion Brothers are a famous set of circus clowns, known worldwide for their incredible ability to cram an unlimited number of themselves into even the smallest vehicle.

aaron_1996的专栏 800

uniapp - 解决真机调试报错 request:fail abort statusCode:-1 java.security.cert.CertPathValidatorException: Tr

uni-app,真机调试报错,app端平台,安卓Android,安卓App发布线上报错,打包后接口请求失效了,api接口报错,真机运行安卓app时接口不通且报错,request:failabortstatusCode:-1java.security.cert.CertPathValidatorException:Trustanchorforcertificationpathnotfound.,真机调试,苹果ios真机报错,Uniapp打包到app后报错,uni-app真机调试报错,服务器

🏆 前端领域优质创作者 1万+

【零基础学习CAPL】——CAN报文的发送(CRC——ChecSum值)

本章主要介绍带有CRC值的报文发送一般报文可使用CANoe的IG模块直接发送,但带有CRC值的报文就只能编写脚本进行发送,以下详细讲解在配合Panel面板情况下,如何进行带有循环冗余码的报文进行报文的发送。

LOVE135149的博客 1912

POJ 1639 Picnic Planning【度限制最小生成树】

POJ 1639 Picnic Planning【度限制最小生成树】 分类: 【图论专辑】2010-08-02 03:47 706人阅读 评论(3) 收藏 举报 treestringinput算法 /*  第一道度限制生成树,写的比较崩溃@@  *  度限制生成树是指对生成树中某些点限制度的生成树,如果是要求权值最小的话  *  便是度限制最小生成树。一般题目也就是对

pi9nc的专栏 679

【Godot】【工程】中文字体与多语言(缺字/体积/打包:一次性配置到位)

本文介绍了Godot游戏开发中的中文字体配置与多语言支持方案。主要内容包括:1)中文字体的全局与局部设置;2)使用子集化技术减小字体体积;3)多语言资源管理及翻译系统实现;4)语言切换机制与控件刷新方法;5)字体回退策略优化显示效果;6)打包优化建议。文章提供了从字体导入到多语言实现的完整解决方案,帮助开发者系统性解决中文显示和多语言支持问题,同时优化资源体积和性能表现。配套案例可供学习参考。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 598

POJ 1639 k度限制生成树

题意就是求最小生成树  但是有一个顶点的度必须不大于k 具体的方法网上都有,但是代码写起来之复杂难以令人想象,我由于代码能力还太弱,导致只能看着别人的代码重写一遍,优化了一些部分。 1.求出除去K度点的最小生成森林,设森林数为m 2.将这m棵树与K度点用每棵树中与K度点距离最短的点相连,生成一个m度最小生成树,总答案为这个生成树的所有边长之和 3.迭代k-m次,尝试将m度生成树扩展为K

水 3119

WINCC7.3破解文件

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

POJ1639 Picnic Planning 最小度限制生成树

Problem Address:http://poj.org/problem?id=1639 【前言】 一道10Y的题目,7WA+2RE。 刚开始确实不知道是这种东西。 后来看了discuss。 后来又下了官方数据。 昨天提交了九次。 到最后熄灯休息

Human_CK的专栏 769

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

POJ 1639 Picnic Planning:最小度限制生成树

题目链接:http://poj.org/problem?id=1639 题意:   给你一个无向图,n个节点,m条边,每条边有边权。   让你求一棵最小生成树,同时保证1号节点的度数<=k。    题解:   最小度限制生成树:     (1)不用与1号节点相连的边,跑一次kruskal,得到了deg个连通块。     (2)选取与1相连的deg条边,并使得边尽可能...

a1392136的博客 230

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

poj 1639 度限制生成树(小矮人野餐)

题意(参考http://www.cnblogs.com/SueMiller/archive/2011/08/10/2133871.html):

dearmango 952

poj1639顶点度限制生成树

题目:http://poj.org/problem?id=1639 对根的度数有限制的最小生成树; 先忽略根,跑最小生成树,得到几个连通块,再一一与根连上; 然后在限制内用根连出去的边来使生成树更小,这需要枚举边以及用dp维护树上边的dfs序之前最大的一个; 此题用邻接矩阵比较方便。 改了一晚上,终于发现是混淆了n和cnt,cnt才是点数。 邻接表失败版: #inc...

aodan5477的博客 184

POJ 1639 Picnic Planning 【最小度限制生成树】

原题链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=11062 http://poj.org/problem?id=1639 参考资料: http://blog.youkuaiyun.com/ji414341055/article/details/5781800 http://www.cnblogs.com/

YYMHL 432

poj1639 Picnic Planning,K度限制生成树

题意: 矮人虽小却喜欢乘坐巨大的轿车,车大到可以装下无论多少矮人。某天,N(N≤20)个矮人打算到野外聚餐。为了集中到聚餐地点,矮人A 要么开车到矮人B 家中,留下自己的轿车在矮人B 家,然后乘坐B 的轿车同行;要么直接开车到聚餐地点,并将车停放在聚餐地。虽然矮人的家很大,可以停放无数量轿车,但是聚餐地点却最多只能停放K 辆轿车。给你一张加权无向图,描述了N 个矮人的家和聚餐地点,求出所有矮人开

天亮说晚安 2188

Picnic Planning poj 1639 k度限制生成树

传送门:poj1639 题意就很晦涩,看了半天才看懂。。我就不解释了,没看懂的再去看看吧。。 重点的重点是本题用到的算法:K度限制最小生成树 即求一个图的最小生成树,且给定点v的度数必须为k。 这也是我第一次接触这个名词,百度了一些资料罗列在下面: 国家集训队2004论文集_汪汀:http://wenku.baidu.com/view/8abefb175f0e7cd1842536aa.h

WA是一笔财富 416

POJ 1639 度限制最小生成树Prim

题意:给出n条无向带权边,求所有点的最小生成树,其中“Park”的度数不超过最后输入的k,输入保证有解。 思路:思路其实很好理解,分为几个步骤: 1.当然将“Park”作为根节点,一开始先删掉它,则原图会分为m个连通分量,分别记录它们的最小生成树,并记录每个分量与根的最小边,于是我们得到了根度数为m时的最小生成树。若k 2.然后考虑将生成树上的一些边替换成与根相邻的边,若根与节点v有边连接

Free Chalks~~~ 跳动的粉笔 937

poj1639:最小度限制生成树

题目:http://poj.org/problem?id=1639 题目大意: 所有的车要去同一地点,而此地点对车子有一个最大容量K,所以车子在行驶的过程中,可以相互合并,求所有车子到达目的地的距离和的最小值;思路: 我们可以现将出目的地以外的车子建立最小生成树,然后从目的地向各子树连接最短边形成一棵树; 然后向子树中连接一条边,这样必定会形成一个环,那么就要把这个环中最大的那个边去掉,直到

Davenny:~我今天该吃点什么捏~ 468

POJ 1639 k度限制生成树

地址:http://blog.youkuaiyun.com/sdj222555/article/details/7697776 题意就是求最小生成树  但是有一个顶点的度必须不大于k 具体的方法网上都有,但是代码写起来之复杂难以令人想象,我由于代码能力还太弱,导致只能看着别人的代码重写一遍,优化了一些部分。 1.求出除去K度点的最小生成森林,设森林数为m 2.将这m

Little_boy_z的博客 370

POJ 1639 Picnic Planning (度限制生成树)

Picnic Planning Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 8340   Accepted: 2946 Description The Contortion Brothers are a famous set of circus clowns, kn...

weixin_34355559的博客 149

POJ1639 Picnic Planning(度限制生成树)

黑书上的例题,所以题意就不啰嗦了,具体模型是求一个无向图的最小生成树,其中有一个点的度有限制(假设为 k)。 要求最小 k 度生成树,我们可以按照下面的步骤来做: 设有度限制的点为 V0 ,V0称为根节点 1,把所有与 V0 相连的边删去,图会分成多个子图(假设为

laoda扯一扯 1250
上一篇: POJ 1466 Girls and Boys (网络流Dinic)
下一篇: POJ 2566 Bound Found
__Galaxy
博客等级 码龄10年 8粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值