2017年团体程序设计天梯赛 - 大区赛 L3-3
题意:有向图找哈密顿回路
比赛的时候剪枝只剪了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的更多相关文章
- 团体程序设计天梯赛(CCCC) L3021 神坛 的一些错误做法(目前网上的方法没一个是对的) 和 一些想法
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3019 代码排版 方法与编译原理密切相关,只有一个测试点段错误
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...
- 团体程序设计天梯赛(CCCC) L3014 周游世界 BFS证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3013 非常弹的球 不同思路
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3012 水果忍者 上凸或下凹的证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...
- 团体程序设计天梯赛(CCCC) L3009 长城 方法证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 树状数组+二分答案查询第k大的数 (团体程序设计天梯赛 L3-002. 堆栈)
前提是数的范围较小 1 数据范围:O(n) 2 查第k大的数i:log(n)(树状数组查询小于等于i的数目)*log(n)(二分找到i) 3 添加:log(n) (树状数组) 4 删除:log(n) ...
- PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...
随机推荐
- JS中map list 数组的迭代
后台传给前台一个map 前台如何迭代呢 $.post("getSys.jhtml", function(data){ var temp = ""; $.each ...
- HDU 1506【单调栈】
思路: 转化成对于某一位置为最小值求向两边最远>=他的位置,用单调栈就能轻易完成. 那么ans=(left+right)*h[i]; 维护单调递增还是递减呢? 我们能很快反应到,一旦碰到一个比他 ...
- window安装android打包环境
1.下载jdkhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载:jdk-8u1 ...
- 2017-8-31 NOIP模拟赛
可接受序列 [题目描述] 让计算机这样读入一列非负整数: 1.读入数T. 2.接着往下读入T个数. 3.如果数列读完了,则停止,否则,转到1. 但是,往往会出现这样的问题:执行第2步时,数列已经没有T ...
- codevs1074 食物链
1074 食物链 2001年NOI全国竞赛 时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题解
- 利用正则取出Stirng中“”引号内的内容
// 取出所有""中间的内容,正则如下 Pattern pattern1 = Pattern.compile("(?<=\")([\\S]+?)(?=\& ...
- LCS最大公共子序列【转载】
在两个字符串中,有些字符会一样,可以形成的子序列也有可能相等,因此,长度最长的相等子序列便是两者间的最长公共字序列,其长度可以使用动态规划来求. 以s1={1,3,4,5,6,7,7,8},s2={3 ...
- Posture Energy——姿态的能量
人的生活是套路化的,人活得越久,被套路化的概率就越大.普通百姓的生活都如同一个模板刻出来的. 一旦生活微调,我们会突然发现原来几十年的认知有问题,如同重获新生的感觉.譬如:早起,当我们每天早起一小时, ...
- js new Date("2016-07-01 08:00:00") 格式在IE内核浏览器中显示NaN的问题
js new Date("2016-07-01 08:00:00") 格式在IE内核浏览器中显示NaN的问题 废话就不多了,var dd = new Date("2016 ...
- [题解](同余)POJ_3696_The Luckiest Number
还是挺难的吧......勉强看懂调了半天 首先表达式可以写成 8(10^x -1)/9,题意为求一个最小的x使L | 8(10^x -1)/9 设d=gcd(L,8) L | 8(10^x -1)/9 ...