问题 B: y

时间限制: 1 Sec  内存限制: 256 MB

题面


题面谢绝公开。

题解


考虑双向搜索。

定义$cal_{i,j,k}$表示当前已经搜索状态中是否存在长度为i,终点为j,搜索过边的状态为k的状态。

同样状态设计定义一个$cal2_{i,j,k}$。每个数组搜一半,暴力转移即可。

考虑初始化:$cal_{i,j,k}$数组起点必须是1节点,因此初始值为$cal_{0,1,0}=1$。

而$cal2_{i,j,k}$数组起点任意。因此$cal_{0,i,0}=1(i \in [1,n])$。

考虑最后将两半状态拼成一个状态,枚举断点即最终状态,判定是否有两个状态可以拼接起来当前总状态即可。

至于拼接的方向问题,可以将$cal2$数组的状态定义稍改一下:倒序搜索,当前起点为j,这样无须反转cal2的状态即可拼接。状态转移不变。

(关于为什么要拆开搜索,如果没有拆开,数组定义将是这样:$ cal[21][91][(1<<20)+10]$,大小为2003847846,也就是说不分开的话状态数将爆炸式增长。)

#include<bits/stdc++.h>
#define rint register int
using namespace std;
int n,m,d,ans,len,ren;
bool cal[][][],cal2[][][];
vector < pair<int,int> > v[];
int main()
{
scanf("%d %d %d",&n,&m,&d);len=d/,ren=d-len;
cal[][][]=;for(rint i=;i<=n;++i)cal2[][i][]=;
for(rint i=,ST,EN,CL;i<=m;++i)
{
scanf("%d %d %d",&ST,&EN,&CL);
v[ST].push_back(make_pair(EN,CL));
v[EN].push_back(make_pair(ST,CL));
}
for(rint i=;i<len;++i)
for(rint j=;j<(<<i);++j)
for(rint k=;k<=n;++k)
if(cal[i][k][j])
{
for(rint q=;q<v[k].size();++q)
cal[i+][v[k][q].first][(j<<)+v[k][q].second]=;
}
for(rint i=;i<ren;++i)
for(rint j=;j<(<<i);++j)
for(rint k=;k<=n;++k)
if(cal2[i][k][j])
{
for(rint q=;q<v[k].size();++q)
cal2[i+][v[k][q].first][(j<<)+v[k][q].second]=;
}
for(rint i=;i<(<<d);++i)for(rint j=;j<=n;++j)
if(cal[len][j][i>>ren]&&cal2[ren][j][i&(<<ren)-]){ans++;break;}
printf("%d\n",ans);
}

「题解」:y的更多相关文章

  1. 「题解」「美团 CodeM 资格赛」跳格子

    目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...

  2. 「题解」「HNOI2013」切糕

    文章目录 「题解」「HNOI2013」切糕 题目描述 思路分析及代码 题目分析 题解及代码 「题解」「HNOI2013」切糕 题目描述 点这里 思路分析及代码 题目分析 这道题的题目可以说得上是史上最 ...

  3. 「题解」JOIOI 王国

    「题解」JOIOI 王国 题目描述 考场思考 正解 题目描述 点这里 考场思考 因为时间不太够了,直接一上来就着手暴力.但是本人太菜,居然暴力爆 000 ,然后当场自闭- 一气之下,发现对 60pts ...

  4. 「题解」:[loj2763][JOI2013]现代豪宅

    问题 A: 现代豪宅 时间限制: 1 Sec  内存限制: 256 MB 题面 题目描述 (题目译自 $JOI 2013 Final T3$「現代的な屋敷」) 你在某个很大的豪宅里迷路了.这个豪宅由东 ...

  5. 「题解」:$Six$

    问题 A: Six 时间限制: 1 Sec  内存限制: 512 MB 题面 题面谢绝公开. 题解 来写一篇正经的题解. 每一个数对于答案的贡献与数本身无关,只与它包含了哪几个质因数有关. 所以考虑二 ...

  6. 「题解」:Kill

    问题 A: Kill 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 80%算法 赛时并没有想到正解,而是选择了另一种正确性较对的贪心验证. 对于每一个怪,我们定义它的 ...

  7. 「题解」:x

    问题 A: x 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 赛时想到了正解并且对拍了很久.对拍没挂,但是评测姬表示我w0了……一脸懵逼. 不难证明,如果对于两个数字 ...

  8. 「题解」:07.16NOIP模拟T2:通讯

    问题 B: 通讯 时间限制: 1 Sec  内存限制: 256 MB 题面 题目描述 “这一切都是命运石之门的选择.” 试图研制时间机器的机关SERN截获了中二科学家伦太郎发往过去的一条短 信,并由此 ...

  9. 「题解」:$e$

    问题 B: $e$ 时间限制: 2 Sec  内存限制: 512 MB 题面 题面谢绝公开. 题解 话说一天考两个主席树这回事…… 正解可以叫树上主席树??(脸哥说也叫主席树上树???) 对于树上的每 ...

随机推荐

  1. React 表单元素实例

    代码实例: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=" ...

  2. Java中的API

    待施工 111 API: Scanner Random String StringBuilder ArrayList 集合详解: 包 import java.util.ArrayList 构造方法pu ...

  3. mycat简介

    开源数据库中间件-MyCat简介 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个时候 ...

  4. Codeforces gym102222 B.Rolling The Polygon 凸包/余弦定理

    题意: 有一个不保证凸的多边形,让你滚一圈,计算某点滚出的轨迹多长. 题解: 求出凸包后,以每个点为转轴,转轴到定点的距离为半径,用余弦定理计算圆心角,计算弧长. #include<iostre ...

  5. Hdu-4757 Tree(可持久化字典树+lca)

    题目链接:点这 我的github地址:点这     Problem Description   Zero and One are good friends who always have fun wi ...

  6. angularjs 中 Factory,Service,Provider 之间的区别

    本片文章是使用了 angularjs 中使用 service 在controller 之间 share 对象和数据 的code(http://jsfiddle.net/kn46u0uj/1/) 来进行 ...

  7. C++之手写strlen函数

    代码: int strlen(const char *str){ assert(str!=NULL); intlen=; while((*str++)!='\0') len++; return len ...

  8. python轻松实现代码编码格式转换

    python轻松实现代码编码格式转换 最近刚换工作不久,没太多的时间去整理工作中的东西,大部分时间都在用来熟悉新公司的业务,熟悉他们的代码框架了,最主要的是还有很多新东西要学,我之前主要是做php后台 ...

  9. 百度编译器ueditor目录创建失败问题解决

    修改ueditor编辑器的文件Uploader.class.php   例如: vim protected/widget/ueditor/php/Uploader.class.php :283 if( ...

  10. Linux 进程间通信 消息队列 实现两个进程间通信

    例子: 通过消息队列实现两个进程间通信,一个进程从终端输入数据,通过消息队列发送,另一个进程通过消息队列接收数据 文件1 创建进程1 终端输入通过消息队列发送数据 #include <stdio ...