CSU 1116 Kingdoms
题意:给你n个城市,m条被摧毁的道路,每条道路修复需要c元,总共有k元,给你每个城市的人口,问在总费用不超过k的情况下 与1号城市相连的城市的最大总人口(包括1号城市)
思路:1号城市是必取的,剩余最多15个城市,枚举每个城市与一号城市的联通状态,共有2^15种,每一种情况跑最小生成树。
代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
const int N=,INF=0x3f3f3f3f;
int p[N],mark[N],a[N][N],low[N],z[N];
int n,m,k,ans,sum;
int prim()
{
int i,j,ans=;
memset(p,,sizeof(p));
p[]=;
for(j=;j<=n;j++)
{
if(mark[j])
low[j]=a[][j];
}
for(i=;i<n;i++)
{
int mi=INF,po;
for(j=;j<=n;j++)
{
if(!p[j]&&mark[j]&&low[j]<mi)
mi=low[j],po=j;
}
if(mi==INF)break;
p[po]=;
ans+=mi;
for(j=;j<=n;j++)
{
if(!p[j]&&mark[j]&&low[j]>a[po][j])
low[j]=a[po][j];
}
}
sum=;
for(i=;i<=n;i++)
if(p[i]&&mark[i])//标记了的点才可以算进总人口
sum+=z[i];
return ans;
}
void dfs(int d)
{
if(d>n)
{
int cnt=prim();
if(sum>ans&&cnt<=k)
ans=sum;
return ;
}
mark[d]=;dfs(d+);
mark[d]=;dfs(d+);
}
int main()
{
int i,j,u,v,w,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&k);
memset(a,0x3f,sizeof(a));
for(i=;i<=n;i++)
scanf("%d",&z[i]);
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
if(w<a[u][v])
a[u][v]=a[v][u]=w;
}
ans=;mark[]=;
dfs();
printf("%d\n",ans);
}
return ;
}
上面的代码枚举是通过搜索,下面一种是通过位运算。
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
const int N=,INF=0x3f3f3f3f;
int p[N],mark[N],a[N][N],low[N],z[N];
int n,m,k,ans,sum;
int prim(int x)
{
int i,j,ans=;
for(i=;i<=n;i++)
{
mark[i]=x&;
x>>=;
}
memset(p,,sizeof(p));
p[]=;
for(j=;j<=n;j++)
{
if(mark[j])
low[j]=a[][j];
}
for(i=;i<n;i++)
{
int mi=INF,po;
for(j=;j<=n;j++)
{
if(!p[j]&&mark[j]&&low[j]<mi)
mi=low[j],po=j;
}
if(mi==INF)break;
p[po]=;
ans+=mi;
for(j=;j<=n;j++)
{
if(!p[j]&&mark[j]&&low[j]>a[po][j])
low[j]=a[po][j];
}
}
sum=;
for(i=;i<=n;i++)
if(p[i]&&mark[i])
sum+=z[i];
return ans;
}
int main()
{
int i,j,u,v,w,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&k);
memset(a,0x3f,sizeof(a));
for(i=;i<=n;i++)
scanf("%d",&z[i]);
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
if(w<a[u][v])
a[u][v]=a[v][u]=w;
}
ans=;
for(i=;i<=(<<n)-;i++)
{
if(i&)
{
int tmp=prim(i);
if(tmp<=k&&sum>ans)
ans=sum;
}
}
printf("%d\n",ans);
}
return ;
}
CSU 1116 Kingdoms的更多相关文章
- CSU 1116 Kingdoms(枚举最小生成树)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1116 解题报告:一个国家有n个城市,有m条路可以修,修每条路要一定的金币,现在这个国家只 ...
- csuoj 1116: Kingdoms
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1116 1116: Kingdoms Time Limit: 3 Sec Memory Limit ...
- csu1116 Kingdoms 最小生成树-枚举状态
题目链接: csu 1116 题意: 有一幅双向图连接N个城市(标号1~n,1表示首都) 每一个城市有一个价值W. 地震摧毁了全部道路,现给出可修复的m条道路并给出修复每条道路所需的费用 问在总费用 ...
- csu 1812: 三角形和矩形 凸包
传送门:csu 1812: 三角形和矩形 思路:首先,求出三角形的在矩形区域的顶点,矩形在三角形区域的顶点.然后求出所有的交点.这些点构成一个凸包,求凸包面积就OK了. /************** ...
- BZOJ 1116: [POI2008]CLO
1116: [POI2008]CLO Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 922 Solved: 514[Submit][Status][ ...
- CSU 1503 点到圆弧的距离(2014湖南省程序设计竞赛A题)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1503 解题报告:分两种情况就可以了,第一种是那个点跟圆心的连线在那段扇形的圆弧范围内,这 ...
- CSU 1120 病毒(DP)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1120 解题报告:dp,用一个串去更新另一个串,递推方程是: if(b[i] > a ...
- CSU 1113 Updating a Dictionary(map容器应用)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113 解题报告:输入两个字符串,第一个是原来的字典,第二个是新字典,字典中的元素的格式为 ...
- CSU 1333 Funny Car Racing (最短路)
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1333 解题报告:一个图里面有n个点和m条单向边,注意是单向边,然后每条路开a秒关闭b秒 ...
随机推荐
- js注入,黑客之路必备!
最近刚出了新闻,阿里四名网络安全部门员工利用网页漏洞写js脚本抢月饼,于是兴致来了,想了解一下这个js脚本到底怎么写,各种刷单各种抢枪抢又是怎么实现的. 什么是javascript注入攻击? 1.每当 ...
- 什么是CSR证书申请文件?
CSR是Cerificate Signing Request的英文缩写,即证书请求文件,在多方之间在互联网上安全分享数据的公钥基础架构PKI系统中,CSR文件必须在申请和购买SSL证书之前创建.也 ...
- c# Sqlite帮助类
最近有WPF做客户端,需要离线操作存储数据,在项目中考虑使用Sqlite嵌入式数据库,在网上找了不少资料,最终整理出一个公共的帮助类. Sqlite是一个非常小巧的数据库,基本上具备关系型数据库操作的 ...
- ArcObject10.1降级至10.0
最开始接触ArcGIS版本是9.3,为了需要也安装了9.2进行开发:因为自己的电脑配置较低,所以跑不起10.0中文版:毕业工作后,行业内用10.1居多(虽然10.3已出):现在10.4都要出来了:由于 ...
- SharePoint 中用户控件的开发及应用
1.新建解决方案以及SharePoint项目,步骤比较简单略过,然后映射CONTROLTEMPLATES文件夹,在里面添加用户控件(仅场解决方案),如下图: 2.解决方案结构,如下图: 简单介绍一下, ...
- Mybatis学习记录(七)----Mybatis查询缓存
1. 什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 sql ...
- 网络开始---多线程---NSThread-02-线程状态(了解)(三)
#import "HMViewController.h" @interface HMViewController () @property (nonatomic, strong) ...
- jvm运行时环境属性一览
前言: 在web编程技术内幕中看到一个用apache组件进行文件下载的例子,对于DiskFileUpload类的setRepositoryPath方法,设置临时文件的存放路径,里面指出如果不调用该方法 ...
- Erlang数据类型的表示和实现(5)——binary
binary 是 Erlang 中一个具有特色的数据结构,用于处理大块的“原始的”字节块.如果没有 binary 这种数据类型,在 Erlang 中处理字节流的话可能还需要像列表或元组这样的数据结构. ...
- eclipse常用快捷键及调试方法(虽然现在看不懂,但是感觉以后肯定会用到,先转了)
常用快捷键 Eclipse最全快捷键,熟悉快捷键可以帮助开发事半功倍,节省更多的时间来用于做有意义的事情. Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行 Ctrl ...