UVa 12507 - Kingdoms(状压dp)

湖南省第八届大学生计算机程序设计竞赛试题 湖南省第八届ACM大学生计算机程序设计竞赛试题,湖南省第八届ACM大学生计算机程序设计竞赛试题;湖南省第八届ACM大学生计算机程序设计竞赛试题; 立即下载
A kingdom has n cities numbered 1 to n, and some bidirectional roads connecting cities. The capital
is always city 1.
After a war, all the roads of the kingdom are destroyed. The king wants to rebuild some of the
roads to connect the cities, but unfortunately, the kingdom is running out of money. The total cost of
rebuilding roads should not exceed K.
Given the list of m roads that can be rebuilt (other roads are severely damaged and cannot be
rebuilt), the king decided to maximize the total population in the capital and all other cities that are
connected (directly or indirectly) with the capital (we call it “accessible population”), can you help
him?
Input
The first line of input contains a single integer T (T ≤ 20), the number of test cases. Each test case
begins with three integers n (4 ≤ n ≤ 16), m (1 ≤ m ≤ 100) and K (1 ≤ K ≤ 100, 000). The second
line contains n positive integers pi (1 ≤ pi ≤ 10, 000), the population of each city. Each of the following
m lines contains three positive integers u, v, c (1 ≤ u, v ≤ n, 1 ≤ c ≤ 1000), representing a destroyed
road connecting city u and v, whose rebuilding cost is c. Note that two cities can be directly connected
by more than one road, but a road cannot directly connect a city and itself.
Output
For each test case, print the maximal accessible population.
Sample Input
2
4 6 6
500 400 300 200
1 2 4
1 3 3
1 4 2
4 3 5
2 4 6
3 2 7
4 6 5
500 400 300 200
1 2 4
1 3 3
1 4 2
4 3 5
2 4 6
3 2 7
Sample Output
1100

1000

题目大意, 给你个n点, m条边的无线图, 顶点1为首都, 每个点的权值为人口数, 每条边的权值为修复此道路的花费, 让你得出花费不超过k的情况下, 以首都为起点的最小生成树所包含的最大人口数。

看了别人的博客, 想了一晚上, 算是搞懂了一些。 基本思路就是暴力搜索, 顶点数为16, 可以用int类型的每一个二进制位表示所有顶点的全部组合形式, 然后验证每一种形式的可行性,最后得出一个最大解。

#include<bits/stdc++.h>
using namespace std;
int pre[20];//并查集
struct node
{
    int v;
    int u;
    int w;
} edge[111]; //边集
int num[20];//存每一点人口数
int k, n, m;
int vis[20];//标记出每一种组合形式
void mix(int a, int b)
{
    pre[a] = b;
}
int Find(int a)
{
    int t = a;
    while(pre[a] != a)
    {
        a = pre[a];
    }
    while(t != a)//并查集优化, 这个循环可以去掉
    {
        int tt = pre[t];
        pre[t] = a;
        t = tt;
    }
    return a;
}
bool cmp(struct node a, struct node b)
{
    return a.w <= b.w;
}
int main()
{
    int t;
    scanf("%d", &t);
    while(t--)
    {
        scanf("%d%d%d", &n, &m, &k);
        for(int i = 1; i <= n; i++)
        {
            scanf("%d", &num[i]);
        }
        for(int i = 0; i < m; i++)
        {
            scanf("%d%d%d", &edge[i].u, &edge[i].v, &edge[i].w);
        }
        sort(edge,edge + m, cmp);
        int len = (1 << n);//将所有组合压缩到 0 - len- 1
        int max_p = -1;//存最大解
        for(int i = 0; i < len; i++)
        {
            int v_cnt = 0;//存每一种组合所包含的点数
            for(int j = 0; j < n; j++)//验证第j + 1个点在第i种组合中是否要连通
            {
                if((1 << j) & i)//第j位存在则将j+1点标记
                {
                    vis[j + 1] = 1;
                    v_cnt ++;
                }
                else
                    vis[j + 1] = 0;
            }
            if(!vis[1])//如果这种组合不包含首都则直接pass掉
            {
                continue;
            }
            for(int j = 1; j <= n; j++)//并查集准备
                pre[j] = j;
            int e_cnt = 0;//存边数量
            int cost = 0;//存花费
            for(int j = 0; j < m; j++)
            {
                int u = edge[j].u;
                int v = edge[j].v;
                int w = edge[j].w;
                int pre_u = Find(u);
                int pre_v = Find(v);
                if(vis[u] && vis[v] && (pre_u != pre_v))//两点被标记且还可以合并则将其合并,边数加一
                {
                    mix(pre_u, pre_v);
                    e_cnt++;
                    cost += w;
                }
                if(e_cnt == v_cnt - 1)
                    break;
            }
            int pop_cnt = 0;
            if(e_cnt == v_cnt - 1 && cost <= k)//满足最小生成树条件且花费不大于k即为一课可行最小生成树,找出各个可行最小生成树的最大人口数
            {
                for(int j = 1; j <= n; j++)
                {
                    if(vis[j])
                    {
                        pop_cnt += num[j];
                    }
                }
                max_p = max(pop_cnt, max_p);
            }

        }
        printf("%d\n", max_p);
    }
    return 0;


Zabbix Trigger actions访问出现500 本篇博客详细介绍了Zabbix访问'Trigger actions'出现的错误状况,访问界面出现500,并提供了解决方案。 阅读详情

相关推荐

FineBI制作数据可视化大屏-数据连接(1)

快速上手大屏可视化,FineBI数据连接配置。

Pangaoyang_的博客 1912

CSUOJ 1116 Kingdoms

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1116、 1116: Kingdoms Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 441  Solved: 145 Description A kingdom has n cities numbered

关于完全听不懂神犇在说什么的事 651

SAP ERP与金蝶云星空的集成案例(新能源光伏行业)

通过建设PLM、SAP、MES、WMS、SCADA、EAM等多系统集成的工业互联网平台作为数字化工厂的控制中枢,不仅可以实现人员、设备、物料、工艺参数、产品等生产全流程追溯管理,同时也可以根据数据采集进行生产现场的控制调节,最大程度降低能耗水平。销售订单创建下推金蝶采购订单创建修改、销售订单创建下推金蝶销售订单创建修改、销售发货过账下推金蝶采购入库单、销售发货过账下推金蝶销售出库单:在SAP ERP系统创建销售订单、销售发货过账单后推送到云星空系统,进行采购/销售订单的创建修改、完成物料的入库和出库流程。

集信通 1616

湖南省第八届程序设计竞赛F

Problem F. Kingdoms   Akingdom has n cities numbered 1 to n, and some bidirectional roads connectingcities. The capital is always city 1.   After awar, all the roads of the kingdom are destroyed

住在半山腰的螃蟹专栏 892

MCNP 减方差技巧(最全)

MCNP的减方差技巧,核心在于不显著增加计算时间的前提下,通过修改模拟过程来降低结果的统计误差。尤其适用于,这类问题中粒子很难到达探测器区域,直接模拟效率极低栅元重要性是常用的减方差技巧,该方法主要对计算模型的不同区域定义不同的重要性数值。当粒子从重要性低的区域废物重要性高的区域,产生更多粒子,增大统计量;当从重要性高的区域进入重要性低的区域,会进行,增快计算效率。n= 中子,N;光子,P;电子 Exi= 栅元i的重要性I=栅元总数项目IMP卡是必须的,除非使用了WWN卡如果粒子进入0。

chencheng1127的博客 925

【01】VisionMaster入门到精通——VisionMaster V4.0.0 试用版安装教程(安装试用补丁与试用授权)

本文详细介绍了海康VisionMaster 4.0.0试用版的安装步骤:首先从官网下载基础安装包、软加密试用版和示例程序(可选);安装时需按顺序完成主程序安装(选择软加密)、试用补丁安装和30天试用授权安装;最后提供了两种启动方式。文章还列出了试用版的7项功能限制,包括最多支持2个流程、2个全局相机等,并特别提醒试用版不维护、不提供补丁,建议用户转为正式版本。安装过程中若出现蓝屏需重启覆盖安装,授权失败时可参考指定解决方案。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 8896

CSU 1116: Kingdoms(状态压缩+DP)

Kingdoms Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 410  Solved: 127 [Submit][Status][Web Board] Description A kingdom has n cities numbered 1 to n, and some bidirectional roads connecti

hellohelloC的博客 664

使用ITK-SNAP软件进行医学图像的标注(label标签设置、调整等)(windows版本,如mac和linux操作则略有不同)

使用ITK-SNAP软件进行医学图像的标注工作:如肿瘤、炎症、出血、梗死等的多类 目标轮廓勾画等。

qianshuqinghan的博客 2万+

UVA - 12507 状压DP

Kingdoms Time Limit: 1000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description 题意:在钱数为k的限制下,求建与1直接或者间接相连的桥,使得人数最多。 思路:初始化只有1的状态为0,其余为

Turne的博客 570

在 Esp32 摄像头上实现边缘脉冲 FOMO 物体检测

本文将详细介绍如何在 Esp32 摄像头上实现边缘脉冲 FOMO 物体检测,并提供实现源码

DT程序员的博客 705

【超详细】计算机操作系统总结及思维导图(汤子瀛版)

计算机操作系统 一.操作系统引论 1.操作系统的目标和功能 目标 方便性 有效性 提高系统资源利用率 提高系统吞吐量 可扩充性 开放性 作用 OS作为用户与计算机硬件系统之间的接口 命令方式 系统调用方式 图标–窗口方式 OS实现了对计算机资源的抽象 2.操作系统的发展过程 未配置操作系统的计算机系统 人工操作方式 用户独占全机 CPU等待人工操作 严重降低...

圣三一 2万+

UVA - 1204 Fun Game (状压DP)

题意: 一群小孩(至少两个)围成一圈做游戏。每一轮从某个小孩开始往他左边或者右边传手帕。一个小孩拿到手帕后在手帕上写上自己的性别,男孩写B,女孩写G,然后按照相同的方向传递给下一个小孩,每一轮都可能在任何一个小孩写完后停止,现在游戏已经进行了n轮,已知n轮中每轮手帕上留下的字,问最少可能有几个小孩。 分析: 定义状态dp[i][j][x]表示当前拿的字符串状态为i,最后一次拿的字符串为j,j...

兜率工的博客 524

华为OD机试 - 项目规划 - 深度优先搜索dfs(Java 2024 C卷 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 1153

UVA - 11825 状压DP

该题目是EMAXX推荐的练习题,刘汝佳的书也有解说 如果S0属于全集,那S0就可以作为一个分组,那么S分组数可以是best{当前S中S0的补集+1} 对于集合类的题目我觉得有点抽象,希望多做多理解把 #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #i...

weixin_30642869的博客 123

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

UVA - 1204 Fun Game——状压dp

题意: 给定n个串(n&lt;=16),要求一个最短的环,使得每个串都是这个环的子串,输出环的长度。 思路: 定义dp(i,j,k)为状态(选定的串的集合, 最后一个串的下标,最后一个串的接法(0正接1反接))的最大重合长度 初始化: dp(1,0,0)=0; 因为题目要求的是环,所以我们一开始要任意选一个串作为环的开头,这里我选择的是下标为0的字符串,并且正放 转移方程: dp(...

hao_zong_yin的博客 502

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

POJ - 3259 Wormholes(SPFA最短路判断负环)

While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it is a one-way path that delivers you to its destination at a time that is

Wabrush的博客 813

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Roads and Libraries(最小生成树)

The Ruler of HackerLand believes that every citizen of the country should have access to a library. Unfortunately, HackerLand was hit by a tornado that destroyed all of its libraries and obstructed it

Wabrush的博客 609

FZU - 2254 英语考试(最小生成树)

在过三个礼拜,YellowStar有一场专业英语考试,因此它必须着手开始复习。这天,YellowStar准备了n个需要背的单词,每个单词的长度均为m。YellowSatr准备采用联想记忆法来背诵这n个单词:1、如果YellowStar凭空背下一个新词T,需要消耗单词长度m的精力2、如果YellowSatr之前已经背诵了一些单词,它可以选择其中一个单词Si,然后通过联想记忆的方法去背诵新词T,需要消耗

Wabrush的博客 601

POJ - 3660 Cow Contest (Warshall算法求传递闭包)

N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Each cow has a certain constant skill rating that is uni

Wabrush的博客 594

UVALive - 6039 Let's Go Green

There are a lot of cities in Tree Land kingdom and each city is connected to other cities with roads such that there is exists exactly one path to go from one city to any other city. Each road in Tree

Wabrush的博客 591

POJ - 2240 Arbitrage(SPFA判断正环| 前向星+SPFA尝试)

Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into more than one unit of the same currency. For example, suppose that 1 US Dollar buys 0.5 British

Wabrush的博客 515

POJ - 1860 Currency Exchange(SPFA最大路判断正环)

Several currency exchange points are working in our city. Let us suppose that each point specializes in two particular currencies and performs exchange operations only with these currencies. There can

Wabrush的博客 514

POJ - 3615 Cow Hurdles (Floyd变形)

Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the gang are practicing jumping over hurdles. They are getting tired, though, so they want to be able to use as l

Wabrush的博客 442

SDUT 3363 数据结构实验之图论七:驴友计划(最短路)

Problem Description 做为一个资深驴友,小新有一张珍藏的自驾游线路图,图上详细的标注了全国各个城市之间的高速公路距离和公路收费情况,现在请你编写一个程序,找出一条出发地到目的地之间的最短路径,如果有多条路径最短,则输出过路费最少的一条路径。 Input 连续T组数据输入,每组输入数据的第一行给出四个正整数N,M,s,d,其中N(2 Output

Wabrush的博客 424

SDUT 2622 最短路径

最短路径 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description 为了准备一年一度的校赛,大家都在忙着往赛场搬运东西,比如气球什么的。这时 YY 也没有闲着,他也加入了搬运工的行列。已知学校有 N 个路口和 M 条路,YY 并不是把东西直接搬到赛场,而是从 S 路口搬运到

Wabrush的博客 408

SDUT 2144 图结构练习——最小生成树

Problem Description  有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的。现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市。   Input  输入包含多组数据,格式如下。 第一行包括两个整数n m,代表城市个数和可以修建的公路个数。(n 剩下m行每行3个正整数a b c,

Wabrush的博客 386
上一篇: 堆
下一篇: FZU - 2254 英语考试(最小生成树)
Wabrush
博客等级 码龄9年 15粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值