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 ...
随机推荐
- short数组写进txt
short[] ssss=new short[gaoDeData.Length]; FileStream fs = new FileStream("E:\\123.txt", Fi ...
- vs中如何使用NuGet
在vs中如何打开NuGet? 1.工具→NuGet程序包管理器→程序包管理控制台 2.没有的话,就去 工具→扩展和更新 搜索nuget 如果你点击工具,没看到Nuget这些字样,请注意汉化名字为 ...
- Notepad++如何多视图(分屏)显示
Notepad++ v6.6.7 当需要同时查阅或者编辑多个文件时,正是多视图功能大显身手的时候. 可以在你想要在另一边预览操作的文件名字(在工具栏和文件内容之间)上,单击右键,如下图所示,选择移动到 ...
- oracle与DB2的一些架构
首先,我们需要理解 Oracle 使用的架构,并理解它与 DB2 的不同之处.图 1 展示了 Oracle 的系统结构.将该图与 图 2 进行比较,后者显示了 DB2 的系统结构.在阅读本文的时候,为 ...
- iOS- 如何建立索引实现本地文本搜索引擎,允许容错搜索?
1.前言 实现一个本地搜索引擎,允许容错搜索,也就是搜索结果不需要和搜索的关键字完全精准匹配.比如,搜索”eric wang“,搜索结果可以包括Erica Watts等等.搜索效率十分高. 这里我们需 ...
- [转帖]IBM收购Red Hat
来源cnbeta:https://www.cnbeta.com/articles/tech/782009.htm 2018年10月28 日,IBM 宣布收购 Linux 巨头 Red Hat.公告中称 ...
- js滚动异步加载数据的思路
<body> <div style="width:200px; height:1000px; border:1px solid red;" id="to ...
- Android 混淆签名打包
1.混淆文件 proguard-rules.pro # Add project specific ProGuard rules here. # By default, the flags in thi ...
- 【数据库】百万级数据库SQL优化大总结
网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉 ...
- UVA11736_Debugging RAM
题目绝对够水,我就不详细说明了. 直接上代码吧.只是提示一下要用 unsigned long long. (不知道我不用字典树为什么会超时,肿么搞的) #include <iostream> ...