题意:给出2K个平面上的点,给它们一一配对,问有多少种配对方法使得存在从某个点一直向右走会陷在循环里(K<=6)

思路:由于k很小,配对方法的话暴力枚举,然后判环,判环时需要注意的是一条直线上的四个点1,2,3,4 其中1和3配对,2和4配对,可以发现它不构成环,详见代码

/*{

ID:a4298442

PROB:wormhole

LANG:C++

}

*/

#include <stdio.h>

#include <iostream>

#include<fstream>

#include <string.h>

#include <algorithm>

#define maxn 1000

using namespace std;

ifstream fin("wormhole.in");

ofstream fout("wormhole.out");

struct T{int x;int y;}p[maxn];

int ans=0,g[maxn],match[maxn],n,visit[maxn];

int cmp(T x,T y){

return (x.y<y.y || ((x.y==y.y)&&(x.x<y.x)));

}

int circle(int u)

{

int vis[100]={0},v=g[u];

vis[u]=1;

while(v!=0){

u=match[v];

if(!u)return 0;v=g[u];

if(vis[u])return 1;vis[u]=1;

}

return 0;

}

void dfs(int k,int u,int num){

if(num==n){

for(int i=1;i<=n;i++)if(circle(i)){ans++;break;}

return;

}

visit[k]=1;

for(int i=(u==0)?k+1:1;i<=n;i++)if(visit[i]==0){

if(u==0){g[i]=k;g[k]=i;}

dfs(i,u^1,num+1);

if(u==0)g[i]=g[k]=0;else break;

}

visit[k]=0;

}

int main(){

fin>>n;

for(int i=1;i<=n;i++)fin>>p[i].x>>p[i].y;

sort(p+1,p+1+n,cmp);

for(int i=2;i<=n;i++)if(p[i].y==p[i-1].y)match[i-1]=i;

dfs(1,0,1);

fout<<ans<<endl;

return 0;

}

【USACO】wormholes 【暴力】的更多相关文章

  1. USACO Wormholes 【DFS】

    描述 农夫约翰爱好在周末进行高能物理实验的结果却适得其反,导致N个虫洞在农场上(2<=N<=12,n是偶数),每个在农场二维地图的一个不同点. 根据他的计算,约翰知道他的虫洞将形成 N/2 ...

  2. USACO ariprog 暴力枚举+剪枝

    /* ID:kevin_s1 PROG:ariprog LANG:C++ */ #include <iostream> #include <cstdio> #include & ...

  3. USACO chapter1

    几天时间就把USACO chapter1重新做了一遍,发现了自己以前许多的不足.蒽,现在的程序明显比以前干净很多,而且效率也提高了许多.继续努力吧,好好的提高自己.这一章主要还是基本功的训练,没多少的 ...

  4. [题解]USACO 1.3 Wormholes

    Wormholes Farmer John's hobby of conducting high-energy physics experiments on weekends has backfire ...

  5. USACO 1.3 Wormholes

    Wormholes Farmer John's hobby of conducting high-energy physics experiments on weekends has backfire ...

  6. USACO 1.3 Ski Course Design - 暴力

    Ski Course Design Farmer John has N hills on his farm (1 <= N <= 1,000), each with an integer ...

  7. USACO 1.3 Wormholes - 搜索

    Wormholes Farmer John's hobby of conducting high-energy physics experiments on weekends has backfire ...

  8. HDU 4277 USACO ORZ(暴力+双向枚举)

    USACO ORZ Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  9. USACO Ski Course Design 暴力

    从Min到Max范围内暴力一下即可. /* ID: wushuai2 PROG: skidesign LANG: C++ */ //#pragma comment(linker, "/STA ...

随机推荐

  1. P3374 【模板】树状数组 1 单点修改与区间查询

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...

  2. 总结这几天学到的HTML标签

    1.基础知识W3S,操作慕课网或者FCC网 2.标签必须闭合 标签一般成对出现如:<h1>xxxx</h1> 标签也有空内容标签如:<br/> 标签的属性和属性值放 ...

  3. Apache CXF 框架结构和基本原理

    CXF旨在为服务创建必要的基础设施,它的整体架构主要由以下几个部分组成: 1.Bus 它是C X F架构的主干,为共享资源提供了一个可配置的场所,作用非常类似于S p r i n g的Applicat ...

  4. Linux PHP的运行模式

    关系图 首先聊一下服务器,常见的web server类型有apache和nginx Apache工作模式 Apache的工作模式是Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦 ...

  5. windows.old文件删除

    在安装完新系统后,会发现C盘下有个windows.old文件夹,大约有个10多G,里面都是对之前系统的一些备份,用于对之前系统恢复时使用,一般一个月后会自动清理,若觉得不会再对系统进行老版本恢复时,又 ...

  6. learnpythonthehardway EX41 相关

    str.count() # str.count()方法用于统计字符串里某个字符出现的次数.可选参数为在字符串搜索的开始与结束位置. # str.count(sub, start= 0,end=len( ...

  7. Vue踩坑第一步,安装Vue最新版本

    学习vue第一步肯定是安装vue-cli,那么肯定想去搜下如何安装vue-cli呢? 网上搜到的结果大都是: npm i vue-cli -g 输入vue -V发现: 输入node -v发现: 自己明 ...

  8. Python 面向对象 特殊方法(魔法方法)

    Python 的特殊方法,两边带双下划线的方法. 比如:__init__(self, ...).__del__(self) 1.__init__(self,...) : 构造方法 __init__(s ...

  9. java使用数据库连接池

    连接池的实现方式是首先使用JNDI(JavaTM Naming and Directory Interface) 将数据源对象注册为一个命名服务,然后使用JNDI提供的服务接口,按照名称检索对应的数据 ...

  10. Java实现LRU(最近最少使用)缓存

    package com.jd.test; import java.io.Serializable; import java.util.LinkedHashMap; import java.util.c ...