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秒 ...
随机推荐
- nginx配合modsecurity实现WAF功能
一.准备工作 系统:centos 7.2 64位.nginx1.10.2, modsecurity2.9.1 owasp3.0 1.nginx:http://nginx.org/download/ng ...
- oauth授权协议的原理
http://oauth.net/2/ 协议的原文.原来是1.0版本,现在是2.0版本了 https://ruby-china.org/topics/15396 https://blog.yorkxi ...
- [翻译]:SQL死锁-为什么会出现死锁
下面这篇对理解死锁非常重要,首先死锁是如何产生的我们要清楚. We already know why blocking occurs in the system and howto detect an ...
- SQL数据库基础(二)
数据类型: --类似于C#中的数据类型 Datetime 范围是:1753.1.1—— 9999.12.31 Smalldatetime 1900.1.1 ——2079.6.6 操作: ...
- StackOverflow Update: 560M Pageviews A Month, 25 Servers, And It's All About Performance
http://highscalability.com/blog/2014/7/21/stackoverflow-update-560m-pageviews-a-month-25-servers-and ...
- javascript --- 只继承于原型
正如上次所述,,出于效率考虑,我们应该尽可能的将一些可重用的属性和方法添加到原型中去. 如果养成了这个好习惯,我们仅仅依靠原型就能顺利的完成继承关系的构建了. 毕竟采用new her()方法将her的 ...
- jQuery中的效果函数方法整理
注:以下所有的speed 参数可选,规定效果的时长.它可以取以下值:"slow"."fast" 或毫秒. 以下所有的callback 参数可选,是效果完成后所执 ...
- ABAP:SAP报表性能的优化
大部分ABAPer都是从SAP报表及打印开始学起的,大家也都认为写个SAP报表程序是最简单不过的事了. 但是实际情况真的如此吗?写报表时除了保证数据的准确性,您可曾考虑过报表的性能问题吗? 由于报表程 ...
- 读取XML绑定TreeNode
<asp:TreeView ID="treeview" OnClick="TreeViewCheckBox_Click()" runat="se ...
- Android 开发组件
每一个应用程序都有自己独立的运行沙盒(授予应用程序代码的访问权) Android操作系统是一个多用户的Linux系统,其中的每一个应用程序都是一个独立的用户. 系统会为每一个应用程序分配一个唯一的Li ...