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) 分治法:不断缩小规 ...
随机推荐
- 【QT】C++ GUI Qt4 学习笔记3
菜单界面的实现. 看书上第三章,好长,好多代码.我敲了半天,想看看效果,结果却显示不出来.仔细一看,发现spreadsheet的实现在第四章.郁闷.... 又到官网上下代码,结果居然不能运行.难道是因 ...
- 【C语言】pragma
① #pragma comment (lib, "libgsl.a") 这是告诉编译器在编译形成的.obj文件和.exe文件中加一条信息,使得 链接器在链接库的时候要去找libgs ...
- 字符串与byte数组转换
string weclome=""; byte[] data = new byte[1024]; //字符串转byte数组 data = Encoding.ASCII.GetByt ...
- NEFU 505 超级红与黑 (高斯消元)
题目链接 中文题,改下模板构造一下就能过了,数据有点水,不过还是需要自由变元枚举的. #include <iostream> #include <cstdio> #includ ...
- JSP题库
一. 填空题 一个完整的JSP页面是由普通的HTML标记.JSP指令标记.JSP动作标记. 变量声明 与方法声明 .程序片 .表达式 . 注释 7种要素构成. JSP页面的基本构 ...
- redis配置详情
# Redis configuration file example # Note on units: when memory size is needed, it is possible to sp ...
- NYOJ题目1049自增自减
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsYAAAN0CAIAAAA4f3koAAAgAElEQVR4nO3dO3LbyNoG4H8TyrUQx1
- jq 确定删除方法与文件删除
var choice=confirm("您确认要删除吗?", function() { }, null); if(choice) ...
- Android Tab -- 使用Fragment、FragmentManager来实现
原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 效果: 代码:https://github.com/ldb-github/La ...
- EasyUi – 1.入门
1.页面引用. jquery,easyui,主题easyui.css,图标ico.css,语言zh_CN.js <script src="Scripts/jquery-easyui-1 ...