CSU 1116 Kingdoms(枚举最小生成树)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1116
解题报告:一个国家有n个城市,有m条路可以修,修每条路要一定的金币,现在这个国家只有K个金币,每个城市有一些人,要你求怎么修路使得总的费用在K的范围内,同时使得跟首都连接的城市的人口(包括首都的人口)要最多,问最多的人口是多少。
枚举连接哪些城市,然后分别构造最小生成树。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = ;
int pop[maxn],mat[maxn][maxn];
int T,n,m,k; int prim(int d,int& ans)
{
int visit[maxn],f = ;
memset(visit,,sizeof(visit));
d = (d << ) + ;
for(int i = ;i <= n;++i)
{
visit[i] = d & ;
d >>= ;
}
int tot = ;
visit[] = ; //等于2才是在集合中的
while()
{
int l = -,temp = 0x7fffffff;
for(int i = ;i <= n;++i)
if(visit[i] == )
{
for(int j = ;j <= n;++j)
if(visit[j] == && mat[i][j] < temp)
{
l = j;
temp = mat[i][j];
}
}
if(l == - || temp > ) break;
tot += temp;
visit[l] = ;
}
ans = ;
for(int i = ;i <= n;++i)
if(visit[i] == )
ans += pop[i];
return tot;
} int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&n,&m,&k);
for(int i = ;i <= n;++i)
scanf("%d",&pop[i]);
int x,y,z;
memset(mat,0x3f,sizeof(mat));
while(m--)
{
scanf("%d%d%d",&x,&y,&z);
mat[x][y] = mat[y][x] = min(mat[x][y],z);
}
int tot = ,t;
for(int i = ;i <= ( << (n-))-;++i)
{
int temp = prim(i,t);
if(temp <= k) tot = max(tot,t);
}
printf("%d\n",tot);
}
return ;
}
CSU 1116 Kingdoms(枚举最小生成树)的更多相关文章
- CSU 1116 Kingdoms
题意:给你n个城市,m条被摧毁的道路,每条道路修复需要c元,总共有k元,给你每个城市的人口,问在总费用不超过k的情况下 与1号城市相连的城市的最大总人口(包括1号城市) 思路:1号城市是必取的,剩余最 ...
- csuoj 1116: Kingdoms
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1116 1116: Kingdoms Time Limit: 3 Sec Memory Limit ...
- UVA1395 Slim Span(枚举最小生成树)
题意: 求最小生成树中,最大的边减去最小的边 最小值. 看了题解发现真简单=_= 将每条边进行从小到大排序,然后从最小到大一次枚举最小生成树,当构成生成树的时候,更新最小值 #include < ...
- Poj(2784),二进制枚举最小生成树
题目链接:http://poj.org/problem?id=2784 Buy or Build Time Limit: 2000MS Memory Limit: 65536K Total Sub ...
- HDU 2489 Minimal Ratio Tree(dfs枚举+最小生成树)
想到枚举m个点,然后求最小生成树,ratio即为最小生成树的边权/总的点权.但是怎么枚举这m个点,实在不会.网上查了一下大牛们的解法,用dfs枚举,没想到dfs还有这么个作用. 参考链接:http:/ ...
- HDU 2489 Minimal Ratio Tree (DFS枚举+最小生成树Prim)
Minimal Ratio Tree Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) ...
- 【HDOJ1598】【枚举+最小生成树】
http://acm.hdu.edu.cn/showproblem.php?pid=1598 find the most comfortable road Time Limit: 1000/1000 ...
- hdu 2489(枚举 + 最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2489 思路:由于N, M的范围比较少,直接枚举所有的可能情况,然后求MST判断即可. #include ...
- hdu1598 find the most comfortable road 枚举+最小生成树
#include<cstdio> #include<cstring> #include<algorithm> #define MAXN 210 #define IN ...
随机推荐
- GitHub的三个按钮
star 的作用是收藏,目的是方便以后查找. watch 的作用是关注,目的是等作者更新的时候,可以收到通知 fork 的作用是参与,目的是你可以增加新的内容,然后 Pull Request,把你的修 ...
- Yocto开发笔记之《Tip-bitbake常用命令》(QQ交流群:519230208)
开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...
- 转: CvMat,Mat和IplImage之间的转化和拷贝
1.CvMat之间的复制 //注意:深拷贝 - 单独分配空间,两者相互独立 CvMat* a; CvMat* b = cvCloneMat(a); //copy a to b 2.Mat之间的复制 / ...
- Ubuntu系统安装(win7双系统)
ubuntuan安装 1.安装方法及工具 1. 安装方法介绍 本人采用的是LiveUSB安装方法,也就是通常所说的U盘安装. 2.工具 硬件工具:U盘,华硕A53s电脑(我的是win7系统) 软件工具 ...
- geoip scala api
#!/bin/bash /home/hadoop/spark-1.6.2/bin/spark-shell --master spark://hbase11:7077 --executor-memory ...
- Java查找算法——二分查找
import java.lang.reflect.Array; import java.nio.Buffer; import java.util.Arrays; import java.util.Ra ...
- Java简单的系统登陆
class Check{ public boolean validate(String name,String password){ if(name.equals("lixinghua&qu ...
- 第3章 jQuery的DOM操作
一. DOM 分为DOM核心,HTML-DOM和CSS-DOM 1.DOM核心 不专属与javascript. 获取对象:document.getElementsByTagName('div') 获 ...
- One Night Ultimate Werewolf Daybreak
http://beziergames.com/products/replacement-tiles-tokens-for-one-night-ultimate-werewolf http://www. ...
- 正则匹配IP
分析 IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255( 2^8 ),段与段之间用英文句点“.”隔开.例如:某台计算机IP地址为10.11.44.100. IP地 ...