UVA 818 Cutting Chains
https://vjudge.net/problem/UVA-818
题意:
有n个圆环,其中有一些已经扣在了一起。现在需要打开尽量少的圆环,使得所有圆环可以组成一条链
n<=15
因为n<=15
二进制枚举子集
1、如果有节点的出度>2,则不能构成链
2、如果有环,则不能构成链
判环方式:有节点被重复访问
3、如果断开环的个数+1<支链的条数,那么不能构成链
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; bool e[16][16],tmp[16][16];
int vis[16],out[16]; int n,ans; void dfs(int x,int y)
{
for(int i=1;i<=n;i++)
if(tmp[x][i] && i!=y)
{
vis[i]++;
if(vis[i]<2) dfs(i,x);
}
} void solve(int s)
{
memcpy(tmp,e,sizeof(tmp));
int cnt=0;
for(int i=1;i<=n;i++)
if(s&(1<<i))
{
cnt++;
for(int j=1;j<=n;j++) tmp[i][j]=tmp[j][i]=false;
}
memset(out,0,sizeof(out));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
if(tmp[i][j]) out[i]++;
if(out[i]>2) return;
}
memset(vis,0,sizeof(vis));
int node=0;
for(int i=1;i<=n;i++)
if(!(s&(1<<i)) && !vis[i])
{
vis[i]++; node++;
dfs(i,-1);
}
for(int i=1;i<=n;i++)
if(vis[i]>=2) return;
if(node>cnt+1) return;
ans=min(ans,cnt);
} int main()
{
int u,v,T=0;
while(1)
{
scanf("%d",&n);
if(!n) return 0;
memset(e,0,sizeof(e));
while(1)
{
scanf("%d%d",&u,&v);
if(u==-1) break;
e[u][v]=e[v][u]=true;
}
ans=15;
int s=1<<15;
for(int i=0;i<s;i++) solve(i);
printf("Set %d: Minimum links to open is %d\n",++T,ans);
}
}
UVA 818 Cutting Chains的更多相关文章
- UVA 818 Cutting Chains(状压 + 暴搜)题解
题意:有1~n个小环,他们中的有些互相扣在一起,问你至少切开几个能把这写小环串成一条链 思路:还是太菜了,题目给的n<=15,显然可以暴力解决. 用二进制表示每个环切还是不切,然后搜索所有情况. ...
- UVA 818 Cutting Chains 切断圆环链 (暴力dfs)
题意就是给一张无向图,去掉某些结点,然后连成一条链,问最少去掉几个结点. n很小n<=15,所以直接枚举2^15个状态就行啦. 链的条件是1.无环,2.没有度大于2的点,3.把n个散链连起来需要 ...
- UVA - 818 Cutting Chains(切断圆环链)(dfs + 二进制法枚举子集)
题意:有n个圆环(n<=15),已知已经扣在一起的圆环,现在需要打开尽量少的圆环,使所有圆环可以组成一条链. 分析:因为不知道要打开哪个环,如果列举所有的可能性,即枚举打开环的所有子集,最多才2 ...
- uva 818 (位运算 + 判环)
Cutting Chains What a find! Anna Locke has just bought several links of chain some of which may be ...
- uva 10003 Cutting Sticks 【区间dp】
题目:uva 10003 Cutting Sticks 题意:给出一根长度 l 的木棍,要截断从某些点,然后截断的花费是当前木棍的长度,求总的最小花费? 分析:典型的区间dp,事实上和石子归并是一样的 ...
- UVA 10003 Cutting Sticks 区间DP+记忆化搜索
UVA 10003 Cutting Sticks+区间DP 纵有疾风起 题目大意 有一个长为L的木棍,木棍中间有n个切点.每次切割的费用为当前木棍的长度.求切割木棍的最小费用 输入输出 第一行是木棍的 ...
- UVa 10003 - Cutting Sticks(区间DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 10003 Cutting Sticks 切木棍 dp
题意:把一根木棍按给定的n个点切下去,每次切的花费为切的那段木棍的长度,求最小花费. 这题出在dp入门这边,但是我看完题后有强烈的既是感,这不是以前做过的石子合并的题目变形吗? 题目其实就是把n+1根 ...
- UVA 529 Addition Chains(迭代搜索)
Addition Chains An addition chain for n is an integer sequence with the following four propertie ...
随机推荐
- Fiber Network ZOJ 1967(Floyd+二进制状态压缩)
Description Several startup companies have decided to build a better Internet, called the "Fibe ...
- Java访问控制
转自:菜鸟教程
- "Hello World"团队召开的第三周第七次会议
今天是我们团队“Hello World!”团队召开的第三周的第七次会议.博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.Todo List 六.会议照片 七.燃尽图 一.会议时 ...
- 敏捷开发之Scrum站立会议
Scrum是迭代式增量软件开发过程,通常用于敏捷开发.站立会议通常指Scrun方法中的每日站立会议.顾名思义,是每天以站姿的方式召开的会议.以下从功能及要点方面对其进行解释说明: 功能: 1. ...
- linux 下svn忽略文件
假设想忽略文件temp 1. cd到temp所在的目录下: 2. svn propedit svn:ignore . 注意:请别漏掉最后的点(.表示当前目录),如果报错请看下面 3. 打开的文件就是忽 ...
- 【转】关于cgi、FastCGI、php-fpm、php-cgi
转自 知乎 的 一个回答 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. web server(比如说nginx)只是内容的分发者.比如 ...
- [计算机网络-数据链路层] CSMA、CSMA/CA、CSMA/CD详解
1.CSMA(载波侦听多路访问协议) CSMA 当其他节点检测到信道被占用时不发送数据.但是当数据发送完后其他节点同时检测到信道为空闲,之后又在同一时刻发送数据,可能再次产生冲突. 2.CSMA/CD ...
- Struts的default.properties五个配置 一般利用按着配置文件的加载的顺序,后面文件和前面文件相同的配置,后面的会把前面的文件的值覆盖的原则 在struts.xml里面进行配置
1 struts.i18n.encoding=UTF-8 配置编码 2 struts.action.extension=action,, 配置浏览器访问地址的后缀 3 struts.devMode = ...
- [二十一]SpringBoot 之 导入xml配置
SpringBoot理念就是零配置编程,但是如果绝对需要使用XML的配置,我们建议您仍旧从一个@Configuration类开始,你可以使用@ImportResouce注解加载XML配置文件,我拿一个 ...
- C++解析(30):关于指针判别、构造异常和模板二义性的疑问
0.目录 1.指针的判别 2.构造中的异常 2.1 如果构造函数中抛出异常会发生什么? 2.2 如果析构函数中抛出异常会发生什么? 3.令人迷惑的写法 3.1 模板中的二义性 3.2 函数异常声明 4 ...