USACO 1.3 Wormholes
来源:互联网 发布:linux 窗口编程工具 编辑:程序博客网 时间:2024/06/05 07:12
USACO 1.3 Wormholes
这题卡了我n久时间。。。
Solution:
1. 按照坐标y值排序,同时按x从小到大排序
2. 连边: 纵坐标相同的点从左至右连边;eg: dot1(1,3)dot2(3,3)dot3(5,3)连dot1->dot2,dot2->3
3. DFS选择不同的连边组合,边数达到n/2时判断并结束
4. 输出结果
/*ID: zzzc181PROG: wormholeLANG: C++*/#include<ctime>#include<cstdio>#include<cstring>#include<algorithm>#define MAXN 30using namespace std;struct data{ int x,y,k;}node[MAXN];int n,ans;int vis[MAXN];int edge1[MAXN],edge2[MAXN];bool cmp(const data & a, const data & b){ if(a.y!=b.y){ return a.y<b.y; } return a.x<b.x;}bool check(int x){ memset(vis,0,sizeof(vis)); bool pd=false; while(1){ vis[x]++; if(vis[x]>n) return true; int i; pd=false; if(edge1[x]){ x=edge2[edge1[x]]; pd=true; } if(!pd) return false; } return false;}void DFS(int x){ if(x==n/2+1){ int p; for(p=1;p<=n;p++){ if(check(p)){ ans++; return; } } return; } int i,j; for(i=1;i<=n;i++){ if(!edge2[i]){ for(j=i+1;j<=n;j++){ if(!edge2[j]){ edge2[i]=j;edge2[j]=i; DFS(x+1); edge2[i]=0;edge2[j]=0; } } break; } }}void solve(){ int i; sort(node+1,node+n+1,cmp); for(i=2;i<=n;i++){ if(node[i-1].y==node[i].y){ edge1[i-1]=i; } } DFS(1); printf("%d\n",ans);}int main(){// clock_t t1=clock(); freopen("wormhole.in","r",stdin); freopen("wormhole.out","w",stdout); scanf("%d",&n); int i; for(i=1;i<=n;i++){ scanf("%d%d",&node[i].x,&node[i].y); node[i].k=i; } solve();// clock_t t2=clock();// printf("%lf\n",(double)(t2-t1)/CLOCKS_PER_SEC); return 0;}
0 0
- USACO Section 1.3 Wormholes
- USACO 1.3.5 Wormholes
- USACO 1.3 Wormholes
- USACO 1.3 Wormholes 虫洞
- USACO 1.3 Wormholes
- USACO 1.3-Wormholes
- USACO 1.3 Wormholes
- USACO section 1.3 Wormholes
- USACO Section 1.3 Wormholes
- [USACO-Training 1.3]Wormholes
- USACO 1.3 Wormholes 爆搜+模拟
- USACO-Section 1.3 Wormholes[搜索]
- USACO Wormholes
- USACO:1.3.5 Wormholes(虫洞)
- USACO 1.3 - Wormholes(暴力图论)
- USACO-Section 1.3 Wormholes(枚举)
- USACO 1.3 Wormholes (枚举+DFS+模拟)
- USACO Wormholes 解题报告
- 万能头文件#include<bits/stdc++.h>
- 使用Dtree显示HBase目录
- codeblocks mingw安装配置问题
- 越低调的人越让人放心,车子也是一样
- 2015最新34期php培训教程[基础就业班带微信开发Discuz二次开发]
- USACO 1.3 Wormholes
- 【MNIST/Python】手写体数字训练/测试数据集(图片格式)下载及分割预处理
- spring 处理乱码的一个非常规方法
- linux学习心得
- time_wheel
- 实现自己的LinkedList
- BinarySearch 有序表的二分查找
- UVM的构造函数new的个人理解
- Bootstrap3.0入门学习系列教程