题意:有向图找哈密顿回路

比赛的时候剪枝只剪了vis

状压没剪对 反而只拿17分...

比赛结束后还去看了一发这个NP问题的QB(快速回溯法...但是对于本题好像大材小用...)

上网看了一个神犇的写法....

才知道我的状压剪枝不对...因为状态不同的点也被剪掉了...

应该用状压表示走过的点,再用一维这些走过的点后出口点是多少...这样可以确保状态唯一(要不合法都不合法~,另外2的20次方不大..)

写的时候因为比赛的代码有测后台数据的代码部分,刚开始没屏蔽....

下次学神犇用断言测数据~

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5+;
const ll mod = 1e9+;
char ch[][];
bool vis[];
bool mk[][<<];
int n;
vector<int>v;
vector<int>g[];
int now;
bool dfs(int x,int deep=,int nx=)
{
if(deep>=n)
{
//cout<<x<<ch[x][now]<<ch[now][x]<<endl;
if(ch[x][now]=='W'||ch[now][x]=='L'){
v.push_back(x);
return true;
}
else return false;
} for(int i=;i<g[x].size();i++)
{ if(vis[g[x][i]]==false&&mk[g[x][i]][nx]==false)
{
vis[g[x][i]] = true;
if(dfs(g[x][i],deep+,nx|(<<(g[x][i]-))))
{
v.push_back(x);
return true;
}
vis[g[x][i]] = false;
mk[g[x][i]][nx] = true;
}
}
return false;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%s",ch[i]+);
}
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(ch[i][j]=='W'||ch[j][i]=='L')
{
g[i].push_back(j);
}
}
}
for(int i=;i<=n;i++)
{
sort(g[i].begin(),g[i].end());
g[i].erase(unique(g[i].begin(),g[i].end()),g[i].end());
}
//正向W 反向L
v.clear();
memset(vis,,sizeof(vis));
now = ;
vis[] = true;
//if(n==18) return 0*printf("No Solution");
if(dfs())
{ for(int j=v.size()-;j>;j--)
{
printf("%d ",v[j]);
}
printf("%d\n",v[]);
return ;
}
printf("No Solution");
return ;
}

2017年团体程序设计天梯赛 - 大区赛 L3-3的更多相关文章

  1. 团体程序设计天梯赛(CCCC) L3021 神坛 的一些错误做法(目前网上的方法没一个是对的) 和 一些想法

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  2. 团体程序设计天梯赛(CCCC) L3019 代码排版 方法与编译原理密切相关,只有一个测试点段错误

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  3. 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code #include <cstdio> #include ...

  4. 团体程序设计天梯赛(CCCC) L3014 周游世界 BFS证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  5. 团体程序设计天梯赛(CCCC) L3013 非常弹的球 不同思路

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  6. 团体程序设计天梯赛(CCCC) L3012 水果忍者 上凸或下凹的证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code #include <cstdio> #include ...

  7. 团体程序设计天梯赛(CCCC) L3009 长城 方法证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  8. 树状数组+二分答案查询第k大的数 (团体程序设计天梯赛 L3-002. 堆栈)

    前提是数的范围较小 1 数据范围:O(n) 2 查第k大的数i:log(n)(树状数组查询小于等于i的数目)*log(n)(二分找到i) 3 添加:log(n) (树状数组) 4 删除:log(n) ...

  9. PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集

    L2-001 紧急救援 (25 分)   作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...

随机推荐

  1. Unity 5着色器系统代码介绍(上)

    http://forum.china.unity3d.com/thread-25724-1-10.html Unity 5着色器系统代码介绍(上) Unity在着色器开发方面提供了很大的灵活性.有些工 ...

  2. 如何备份Chrome浏览器收藏夹

    前言:最近,由于工作需要,要卸载当前Chrome版本,并安装最新版Chrome.卸载前,意识到之前收藏在收藏夹里的很多知识链接还未备份,于是有了今天的话题:如何备份Chrome浏览器的收藏夹? 主题: ...

  3. Nacos深入浅出(三)

    EventDispatcher.fireEvent(new ConfigDataChangeEvent(true, dataId, group, tenant, time.getTime())); 跟 ...

  4. node.js安装与配置

    node.js是一个基于Chrome V8引擎的javascrit运行环境. node.js使用了一个事件驱动.非阻塞式I/O的模型,使其轻量又高级. node.js的包管理器npm,是全球最大的开源 ...

  5. Spring @Import 注解

    @Import  导入某个bean 文件 @Configuration @Import({User.class,MyImportSelector.class,MyImportBeanDefinitio ...

  6. linux 03 命令 续

    linux 03 命令 续 一.vim 两种操作方式:新文件 pyvip@Vip:~/demo/2_3$ vim demo.txt #操作一个新文件 一开始进入的是命令模式,按i进入插入模式,开始编辑 ...

  7. 洛谷1220(区间dp)

    要点 处于什么位置的题常用一个套路就是搞完\([l,r]\)以后处于0(l)或1(r)的状态,即\(dp[i][j][0/1]\). 对于此题dp意义为已经搞完\([l,r]\)的时最小的已耗电能,转 ...

  8. Kestrel服务器启动并处理Http请求

    从Hosting开始   知识点: 1.Kestrel服务器启动并处理Http请求的过程. 2.Startup的作用. 源码飘香: 总结: asp.net core将web开发拆分为多个独立的组件,大 ...

  9. SQL server 游标,随机数使用

    SELECT * FROM [goods] DECLARE test_cursor CURSOR scroll FOR SELECT goods_no, [unitprice] FROM [goods ...

  10. 《java学习二》jvm性能优化-----认识jvm

    Java内存结构 Java堆(Java Heap) java堆是java虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域. 在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例,这一 ...