1140 分珠 dfs
时间限制:500MS 内存限制:65536K
提交次数:24 通过次数:18
题型: 编程题 语言: G++;GCC
Description
如下图所示,有若干珠子,每颗珠子重量不同,珠子之间有一些细线将它们连在一起。现要求切断一些细线,将它们分成两部分,分割后,单独每一部分的珠子仍保持相连,且要求尽量做到两部分总重相等或相差最少。
请编一程序,给定珠子个数、每颗珠子的重量以及珠子之间的连接情况,输出按上述要求分割后两部分总重的差值的绝对值。
输入格式
第一行有两个数N与M(1<=N,M<=10),N为珠子个数(珠子编号依次为1,2,3,...,N),M为连接珠子的细线数目。第二行为N个正整数,分别为N个珠子的重量。此后M行,每行两个数X与Y,表示珠子X与珠子Y由细线相连。
输出格式
按要求分割后两部分总重的差值的绝对值。
输入样例
5 5
1 2 3 4 1
1 2
1 3
2 3
3 4
4 5
输出样例
1
题意:给出一个图,将图分成两半,每一部分都需要保持连通,问分开能得到的最小差值
思路:n最大只有10,可以枚举n的所有组合作为其中一半,然后判断这一半所有节点是否连通,然后再判断剩下的所有节点是否连通,从所有组合中得到最小差值
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
using namespace std ;
int a[], G[][], vis[] ;
int n, m, sx ;
vector<int> vc;//vc里面存储当前枚举到的节点,并判断连通性
void dfs(int cur)//dfs标记
{
vis[cur] = ;
for(int i = ; i <= n; ++i)
if(!vis[i] && G[cur][i]) dfs(i) ;
}
int _union()//判断连通性
{
int leap = ;
for(int i = ; i < sx; ++i){
leap = ;
for(int j = ; j < sx; ++j) if(i != j){
if(G[ vc[i] ][ vc[j] ]){
leap = ;
break ;
}
}
if(!leap) break ;
}
if(!leap) return ;
else return ;
}
int check()
{
sx = vc.size() ;
if(vc.size() > ) if(!_union()) return ;
for(int k = ; k <= n; ++k) if(!vis[k]){
dfs(k) ;
break ;
}
for(int i = ; i <= n; ++i)
if(!vis[i]) return ;
return ;
}
int main()
{
int u, v, sum = , mi = << , flag ;
memset(G, , sizeof G) ;
scanf("%d%d",&n,&m) ;
for(int i = ; i <= n; ++i){
scanf("%d",&a[i]) ;
sum += a[i] ;
}
flag = sum >> ;//以sum的一半作为flag
for(int i = ; i <= m ; ++i){
scanf("%d%d",&u,&v) ;
G[u][v] = ;
G[v][u] = ;
}
for(int i = ; i < ( << n); ++i)//枚举所有的组合
{
int now = ;
vc.clear() ;
memset(vis, , sizeof vis) ;
for(int j = ; j <= n; ++j)
if(i & ( << (j - ))){
vis[j] = ;
now += a[j] ;
vc.push_back(j) ;
}
if(now < flag || now >= mi) continue ;
if(check()) mi = now ;
}
printf("%d\n",abs(sum - * mi)) ;
}
修改一下,当vc.size() == 2 时, 也要判断这两个节点的连通性
1140 分珠 dfs的更多相关文章
- 分珠(dfs+并查集)
1140 分珠 时间限制:500MS 内存限制:65536K提交次数:24 通过次数:18 题型: 编程题 语言: G++;GCC Description 如下图所示,有若干珠子,每颗珠子重量不 ...
- PAT 甲级 1053 Path of Equal Weight (30 分)(dfs,vector内元素排序,有一小坑点)
1053 Path of Equal Weight (30 分) Given a non-empty tree with root R, and with weight Wi assigne ...
- 邮局 100分代码(dfs+多重剪枝)
蓝桥杯真题-邮局 #include<iostream> #include<algorithm> #include<set> #include<string&g ...
- PAT A1103 Integer Factorization (30 分)——dfs,递归
The K−P factorization of a positive integer N is to write N as the sum of the P-th power of K positi ...
- 【PAT甲级】1094 The Largest Generation (25 分)(DFS)
题意: 输入两个正整数N和M(N<100,M<N),表示结点数量和有孩子结点的结点数量,输出拥有结点最多的层的结点数量和层号(根节点为01,层数为1,层号向下递增). AAAAAccept ...
- 【PAT甲级】1053 Path of Equal Weight (30 分)(DFS)
题意: 输入三个正整数N,M,S(N<=100,M<N,S<=2^30)分别代表数的结点个数,非叶子结点个数和需要查询的值,接下来输入N个正整数(<1000)代表每个结点的权重 ...
- 1034 Head of a Gang (30分)(dfs 利用map)
One way that the police finds the head of a gang is to check people's phone calls. If there is a pho ...
- 天梯赛练习 L3-011 直捣黄龙 (30分) dijkstra + dfs
题目分析: 本题我有两种思路,一种是只依靠dijkstra算法,在dijkstra部分直接判断所有的情况,以局部最优解得到全局最优解,另一种是dijkstra + dfs,先计算出最短距离以及每个点的 ...
- ACM/ICPC 之 分治法入门(画图模拟:POJ 2083)
题意:大致就是要求画出这个有规律的Fractal图形了= = 例如 1 对应 X 2 对应 X X X X X 这个题是个理解分治法很典型的例子(详情请参见Code) 分治法:不断缩小规 ...
随机推荐
- 生成Geometry
// 由一组点集生成一张三角面片网格Geometry osg::Geometry* createTRIANGLESGeometry(MyMesh &mesh) { osg::ref_ptr&l ...
- 多线程编程2 - NSOperation
一.NSOperation 1.简介 NSOperation实例封装了需要执行的操作和执行操作所需的数据,并且能够以并发或非并发的方式执行这个操作. NSOperation本身是抽象基类,因此必须使用 ...
- 矿场搭建(codevs 1996)
题目描述 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使 ...
- android的JNI 、 NDK 学习!
转载的! Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) ...
- 浅析 - 提高xib(Interface Builder)高效工作的几个小技巧
本文译自:8 Tips for working effectively with Interface Builder(需FQ)先来看看目录:介绍使view的Size与view中的Content相适应按 ...
- Thinkphp3.2中的模板继承
1:模板继承: 是3.1.2版本添加的一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层.模板继承其实并不难理解,就好比 类的继承一样,模板也可以定义一个基础模板( ...
- java 中的一个项目如何做到访问另一个项目的一个方法 或者 页面
两种方法:1.将一个项目打成jar包,第二个项目进行导入该jar包,就可以使用第一个项目里的类方法属性等2.将第一个项目发布出去,然后第二个项目调用,所谓发布出去就是开发远程接口,允许其他人调用.
- python中获取当前日期在当月是第几天
- MVC – 15.路由机制
15.1.路由检测插件 - RouteDebug 15.2.路由约束 15.3.命名路由 15.4.验证码 15.5.ASP.NET MVC 与 三层架构 15.6.Area区域 15.6.1.尝试将 ...
- 什么是DMI,SMBIOS,符合SMBIOS规范的计算机的系统信息获取方法
转自:http://www.cnblogs.com/gunl/archive/2011/08/08/2130719.html DMI是英文单词Desktop Management Interface的 ...