UVa818 - Cutting Chains
来源:互联网 发布:自建淘宝客网站模板 编辑:程序博客网 时间:2024/05/17 22:29
打开一定数量铁环后,能否连成串的判断:
1、没有环
2、打开的铁环足够把剩下的铁环串成串(没打开的铁环的连通量 <= 打开的铁环数 + 1;如果没有打开铁环,连通量 == 1)
3、不能有铁环的度大于2(一开始没想到啊。。感觉像是高中化学画同分异构体的时候加入了化合价要求一样),否则就会变成几条铁链交叉
利用位运算去枚举哪几个铁环要open。然后判断剩下珠子有没有超过2个分支或者形成环,如果没有,在判断剩下的链个数有没有超过open个数-1.如果条件都符合,那么保留下最小最为答案。
上面两句基本是一个意思,首先判断铁环没有超过两个分支(也就是度大于2)或者形成了环度为0,在判断打开了的铁环+1是能够连上的环数,看剩下的能不能都连上。
0x3f3f3f3f 0x开头的 是十六进制常数, 等于 十进制 1061109567等于 二进制: 00111111 00111111 00111111 00111111这个真的有困难,位运算符,好多不懂的地方
#include<stdio.h>#include<string.h>#define min(a,b) (a)<(b)?(a):(b)#define INF 0x3f3f3f3fconst int N = 20;int n, g[N][N], vis[N], cn;void init(){ int a,b; memset(g, 0, sizeof(g)); while( ~scanf("%d%d",&a,&b) && a != -1 && b != -1 ){ g[a-1][b-1]=g[b-1][a-1]=1; }}bool two(int s){ for(int i=0;i<n;i++){ if(s&(1<<i)) continue; int num=0; for(int j=0;j<n;j++){ if(s&(1<<j)) continue; if(g[i][j]) num++; } if(num > 2) return true; } return false;}bool dfs(int s,int now,int fa){ vis[now]=1; for(int i=0;i<n;i++){ if(!g[now][i] || (s&(1<<i)) || i == fa) continue; if(vis[i]) return true; if( dfs(s,i,now) ) return true; } return false;}bool circle(int s){ for(int i=0;i<n;i++){ if(vis[i]||(s&(1<<i))) continue; cn++; if(dfs(s,i,-1)) return true; } return false;}int cal(int s){ return s == 0 ? 0 : cal(s / 2) + (s&1);}int solve(){ int ans=INF; int s = (1<<n); for(int i=0;i<s;i++){ cn=0; memset(vis,0,sizeof(vis)); if(two(i) || circle(i)) continue; if(cal(i) >= cn - 1) ans = min(cal(i),ans); } return ans;}int main(){ int cas=0; while(~scanf("%d",&n)&&n){ init(); printf("Set %d: Minimum links to open is %d\n",++cas, solve()); } return 0;}
0 0
- UVa818 - Cutting Chains
- 习题7-4 切断圆环链(Cutting Chains, ACM/ICPC World Finals 2000, UVa818)
- UVa 818 Cutting Chains
- 818 - Cutting Chains
- UVA 818 Cutting Chains
- UVA 818 Cutting Chains
- Cutting Chains UVA
- uva 818 Cutting Chains
- Cutting Chains UVA
- UVA 818 Cutting Chains (DFS)
- UVA - 818 Cutting Chains 暴力
- uva 818 - Cutting Chains(暴力)
- UVa #818 Cutting Chains (习题7-4)
- UVa 818 - Cutting Chains <位运算+搜索>
- UVa 818:Cutting Chains(暴力)
- UVA 818 Cutting Chains(二进制枚举+DFS)
- UVA 818 - Cutting Chains(暴力+dfs判环+位运算)
- uva 818 Cutting Chains(dfs+状态压缩)
- 【排序】选择排序模板
- JVM高级特性与最佳实践-虚拟机性能监控与故障处理
- java 和javac命令
- 第十一天:poj1013(水题,思路正确清楚,很简单)
- 位图法浅析
- UVa818 - Cutting Chains
- Android 监听WIFI
- 【排序】快速排序模板
- OpenStack源码系列---nova-compute
- 分布式系统中的RPC请求经常出现乱序的情况 写一个算法来将一个乱序的序列保序输出
- 用Java实现的2048(没UI)
- HTTP协议
- RFID第七章作业——物联网1122-08黄炜彬
- 【排序】插入排序模板