uva-10160-枚举
若当前搜索到的城市n前面1~n-1编号的城市中有没有通电的,则永远也无法输送电力给那个城市,因为在剪枝时附加了和此结点连接的最大结点小于当前的结点
这段
for(int i = 1; i < cur; i++)
if(!vis[i] && map[i][0] < cur)
return;
#include<iostream>
#include <new>
#include<stdio.h>
#include<memory.h>
using namespace std;
int n, m;
int map[][];
int index2[];
int vis[];
int res = ;
void sort(int a[], int length)
{
for(int i = ; i < length; i++)
for(int j = ; j < length - i; j++)
if(a[j] > a[j - ])
{
int k = a[j - ];
a[j - ] = a[j];
a[j] = k;
}
}
void dfs(int cur, int sum, int total)
{
if(sum >= res)
return;
if(total == n)
{
res = sum;
return;
}
for(int i = ; i < cur; i++)
if(!vis[i] && map[i][] < cur)
return;
//不选
dfs(cur + , sum, total);
int k = ;
int vis2[] = { };
for(int i = ; i < index2[cur]; i++)
{
if(!vis[map[cur][i]])
{
vis[map[cur][i]] = ;
//选,这次覆盖到点
vis2[k++] = map[cur][i];
}
}
if(!k)
//没有新的点覆盖
return;
dfs(cur + , sum + , total + k);
for(int i = ; i < k; i++)
vis[vis2[i]] = ;
}
int main()
{
freopen("d:\\1.txt", "r", stdin);
while (cin >> n >> m && n != && m != )
{
memset(map, -, sizeof(map));
memset(vis, , sizeof(vis));
memset(index2, , sizeof(index2));
int s, e;
for(int i = ; i < m; i++)
{
cin >> s >> e;
map[s][index2[s]++] = e;
map[e][index2[e]++] = s;
}
for(int i = ; i <= n; i++)
{
map[i][index2[i]++] = i;
sort(map[i], index2[i]);
}
res = 0x7fffffff;
dfs(, , );
cout << res << endl;
}
return ;
}
uva-10160-枚举的更多相关文章
- UVa 12169 (枚举+扩展欧几里得) Disgruntled Judge
题意: 给出四个数T, a, b, x1,按公式生成序列 xi = (a*xi-1 + b) % 10001 (2 ≤ i ≤ 2T) 给出T和奇数项xi,输出偶数项xi 分析: 最简单的办法就是直接 ...
- UVa 140 (枚举排列) Bandwidth
题意较复杂,请参见原题=_=|| 没什么好说的,直接枚举每个排列就好了,然后记录最小带宽,以及对应的最佳排列. STL里的next_permutation函数真是好用. 比较蛋疼的就是题目的输入了.. ...
- UVa 1151 (枚举 + MST) Buy or Build
题意: 平面上有n个点,现在要把它们全部连通起来.现在有q个套餐,如果购买了第i个套餐,则这个套餐中的点全部连通起来.也可以自己单独地建一条边,费用为两点欧几里得距离的平方.求使所有点连通的最小费用. ...
- Even Parity UVA - 11464 (枚举)
从来没有觉得枚举有多费脑子的.但是这道题还是很香的. 思路:就是非常简单的枚举啦. 从一般的枚举开始考虑.一般的做法就是在所有的格子中有两种状态1, 0. 而一共有225个格子,所有一共要枚举的情 ...
- UVa 1354 枚举子集 Mobile Computing
只要枚举左右两个子天平砝码的集合,我们就能算出左右两个悬挂点到根悬挂点的距离. 但是题中要求找尽量宽的天平但是不能超过房间的宽度,想不到要怎样记录结果. 参考别人代码,用了一个结构体的vector,保 ...
- uva 10160
一开始写的代码加上各种剪枝后还是超时, 然后看了一下状态压缩后过了,两个代码的具体思想是一样的,状态压缩后可以大大提升性能 #include <cstdio> #include <c ...
- UVA 10160 Servicing Stations(深搜 + 剪枝)
Problem D: Servicing stations A company offers personal computers for sale in N towns (3 <= N < ...
- uva 10160 Servicing Stations(DFS+剪枝)
Servicing stations A company offers personal computers for sale in N towns (3 <= N <= 35). The ...
- UVA 10160 Servicing Stations(状态压缩+迭代加深)
[题目链接] LInk [题目大意] 给出一些点和边,选择一个点就能把这个点和相邻的点都覆盖,求最小点覆盖 [题解] 我们压缩点被覆盖的状态,迭代加深搜索覆盖的最小点数, 当剩余的点全部选上时都无法完 ...
- Uva 11754(枚举+中国剩余定理)
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #inclu ...
随机推荐
- Django FBV和CBV -
一.FBV和CBV 在Python菜鸟之路:Django 路由.模板.Model(ORM)一节中,已经介绍了几种路由的写法及对应关系,那种写法可以称之为FBV: function base view ...
- dns over https 简单测试(docker 运行)
dns over https 已经成为了标准了,给予我们的dns 解析添加了安全的支持 测试项目使用docker && docker-compose 运行 一张参考图 环境准备 d ...
- Oracle C#处理时间类型的Insert
首先如果直接 parm.Value=DateTime.Now; insert into table (TheTime)Value(@parm); 执行sql就会报错 ----------- ...
- 【转】每天一个linux命令(25):linux文件属性详解
原文网址:http://www.cnblogs.com/peida/archive/2012/11/23/2783762.html Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模 ...
- 如何生成SPFILE文件
1.spfile是Oracle9i之后引入的,目的是提高系统安全性.在Oracle8i下初始化参数文件为文本文件,可以使用文本编辑器进行编辑,当需要修改初始化参数时,需要在init.ora文件中修改, ...
- Oracle DataBase单实例使用ASM案例(1)--ASM基本概念
版权声明:本文为博主原创文章,未经博主允许不得转载. Oracle DataBase单实例使用ASM案例(1)--ASM基本概念 系统环境: 操作系统:RH EL5-64 Oracle 软件: Ora ...
- java关键字,保留字
Java语言有51个保留关键字,其中const和goto虽然被保留但未被使用.你不能使用保留关键字来命名类.方法或变量. 一.保留关键字 数据类型: Boolean int long sh ...
- Angular 4 表单校验2
1. 将表单的方法移动到单独的ts文件夹中 2. code export function mobileValidator(control: FormControl): any { const myr ...
- mac的framework的路径
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/S ...
- 把普通的JavaProject变成MavenProject
1,安装Maven Eclipse插件 2,在项目上点右键->Configure->Convert to maven project 3,在项目上点右键->Run as->Ru ...