杂题专项:UVa 818
来源:互联网 发布:绝地求生辅助网站源码 编辑:程序博客网 时间:2024/05/22 15:48
这题太抽了,完全看不懂题目。模仿UVa论坛上的思路勉强把这题过了,虽然后来有点懂了,但说起来着实费劲,就直接贴代码吧。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <string>#include <sstream>using namespace std;int n;string str;int g[20][20];int vis[20];int bitcount(int x){return x==0?0:bitcount(x/2)+(x&1);}int loop;void dfs(int u,int st,int fa){ vis[u]=1; for(int i=0;i<n;i++) if(!(st&(1<<i))&&i!=fa) { if(g[u][i]&&!vis[i]) dfs(i,st,u); else if(g[u][i]&&vis[i]) loop=1; }}int main(){ int kase=1; while(cin>>n&&n) { getline(cin,str); istringstream in(str); int u,v; memset(g,0,sizeof(g)); while(in>>u>>v) { if(u<0&&v<0) break; u--;v--; g[u][v]=g[v][u]=1; } int ans=20; for(int s=0;s<(1<<n);s++) { int flag=1; for(int i=0;i<n;i++) if(!(s&(1<<i))) { int cnt=0; for(int j=0;j<n;j++) if(!(s&(1<<j))) { if(g[i][j]) cnt++; } if(cnt>2) {flag=0;break;} } if(!flag) continue; int cnt=0; memset(vis,0,sizeof(vis)); loop=0; for(int i=0;i<n;i++) if(!(s&(1<<i))&&!vis[i]) { cnt++; dfs(i,s,-1); } if(loop) continue; //cout<<s<<" "<<cnt<<endl; if(bitcount(s)>=cnt-1) ans=min(ans,bitcount(s)); } cout<<"Set "<<kase++<<": Minimum links to open is "<<ans<<endl; } return 0;}
- 杂题专项:UVa 818
- 杂题专项:UVa 10670
- 杂题专项:UVa 10382
- 杂题专项:UVa 10012
- 杂题专项:UVa 11627
- 字符串专项:UVa 12012
- 搜索专项:UVa 10318
- 字符串专项:UVa 10298
- 字符串专项:UVa 11475
- 字符串专项:UVa 11855
- 杂题专项:LA 3602
- 杂题专项:LA 5842
- 数学专项counting:UVa 11038
- 数学专项counting:UVa 10883
- 计算几何专项:UVa 11437
- 计算几何专项:UVa 11646
- 计算几何专项:UVa 11817
- 计算几何专项:UVa 11524
- LoadRunner结果分析 – TPS
- Object-C 实现判断一个字符串是否是数字
- 动态规划专项intermediate:UVa 11400
- LoadRunner压力测试结果分析探讨
- 性能问题定位及调优
- 杂题专项:UVa 818
- poj 3270 置换群
- 《c和指针》笔记-简洁的二叉查找树删除node方法
- Python Exercise #19
- linux内核同步之每CPU变量、原子操作、内存屏障、自旋锁
- 测试cpu的简单工具-dhrystone
- UVa 516-Prime Land
- 读写信号量,读写锁,顺序锁
- php学习(三)遍历数组的方法