T1 玩具

题目读错意思直接报零。。。

拼接方式没读懂以为是个数学题,用卡特兰数,可是的确想多了

数据范围表达出你怎么暴力都行,选择$n^3,dp$

相当于一片森林,每次多加一条边就合并成一棵树

在$dp$过程中统计合并的树的信息再算上贡献就行

T2 y

因为上次考试做过的v是一个将状态提取到数组里

这次为了暴力用了同样的方法

将状态枚举,提取出来后进行$XIN$队

 1 #include<bits/stdc++.h>//状压思想枚举每一种状态,然后爆搜
2 #define int long long
3 using namespace std;
4 int n,m,d;bool flag;short pre[21];
5 struct SNOW{int from,to,val,next;};SNOW e[1000000]; int head[1000000],rp;
6 inline void add(int x,int y,int z){e[++rp]=(SNOW){x,y,z,head[x]};head[x]=rp;}
7 inline void dfs(int x,int cnt){
8 if(!cnt){flag=1;return;}
9 for(int i=head[x];i;i=e[i].next)
10 if(e[i].val==pre[cnt]) dfs(e[i].to,cnt-1);
11 return;
12 }
13 namespace WSN{
14 inline int main(){
15 scanf("%lld%lld%lld",&n,&m,&d); int tmp=0;
16 for(int i=1,u,v,c;i<=m;i++){
17 scanf("%lld%lld%lld",&u,&v,&c),add(u,v,c),add(v,u,c);
18 if(!c) tmp++;
19 }
20 if(tmp==m){
21 if(m==1) {cout<<0<<endl;return 0;}
22 else {cout<<1<<endl;return 0;}
23 }
24 int mzs=1<<d,ans=0;
25 for(int i=0;i<mzs;i++){
26 int st=i; flag=0;
27 for(int j=1;j<=d;j++) pre[j]=(st&1),st>>=1;
28 dfs(1,d); if(flag) ans++;
29 }
30 printf("%lld\n",ans);
31 return 0;
32 }
33 }
34 signed main(){return WSN::main();}

正解是一个叫$Meet In the Middle$的东西,其实可以很简单的理解为起点终点向中间去碰数。。

就分别统计以1到它长度为$len/2$的所有状态,距离1为$d$的点到中间$d/2$的所有状态

再依次拼接,查看有没有重复计算的总状态即可

复杂度最高的在于枚举状态,他分成$d/2$的两次枚举,比直接枚举$d$快了不知道多少。。

 1 #include<bits/stdc++.h>//状压思想枚举每一种状态,然后爆搜
2 #define int long long
3 using namespace std;
4 int n,m,d,len;
5 bool vis[1<<21];
6 vector<int> vc1[91],vc2[91];
7 bool f1[91][91][1025],f2[91][91][1025];
8 struct SNOW{int from,to,val,next;};SNOW e[1000000]; int head[1000000],rp;
9 inline void add(int x,int y,int z){e[++rp]=(SNOW){x,y,z,head[x]};head[x]=rp;}
10 namespace WSN{
11 inline int main(){
12 scanf("%lld%lld%lld",&n,&m,&d); int ans=0;
13 for(int i=1,u,v,c;i<=m;i++)scanf("%lld%lld%lld",&u,&v,&c),add(u,v,c),add(v,u,c);
14 len=d>>1; f1[0][1][0]=1;
15 for(int i=1;i<=len;i++) for(int j=1;j<=n;j++) for(int k=0;k<(1<<i);k++)
16 for(int u=head[j];u;u=e[u].next) f1[i][e[u].to][k<<1|e[u].val]|=f1[i-1][j][k];
17 int lenn;
18 if(d%2!=0) lenn=len+1;
19 else lenn=len;
20 for(int i=1;i<=n;i++) f2[0][i][0]=1;
21 for(int i=1;i<=lenn;i++) for(int j=1;j<=n;j++) for(int k=0;k<(1<<i);k++)
22 for(int u=head[j];u;u=e[u].next) f2[i][e[u].to][k<<1|e[u].val]|=f2[i-1][j][k];
23 for(int i=1;i<=n;i++){
24 for(int k=0;k<(1<<len);k++) if(f1[len][i][k]) vc1[i].push_back(k);
25 for(int k=0;k<(1<<lenn);k++) if(f2[lenn][i][k]) vc2[i].push_back(k);
26 }
27 for(int i=1;i<=n;i++) for(int j=0;j<vc1[i].size();j++) for(int k=0;k<vc2[i].size();k++)
28 if(!vis[(vc1[i][j]<<lenn|vc2[i][k])]) ans++,vis[(vc1[i][j]<<lenn|vc2[i][k])]++;
29 printf("%lld\n",ans);
30 return 0;
31 }
32 }
33 signed main(){return WSN::main();}

优秀的缩进

T3 z

超级麻烦的一道题,现在还没改出来,先沽了~~~

Noip模拟20 2021.7.19的更多相关文章

  1. Noip模拟44 2021.8.19

    比较惊人的排行榜 更不用说爆零的人数了,为什么联赛会这么难!!害怕了 还要再努力鸭 T1 Emotional Flutter 考场上没切掉的神仙题 考率如何贪心,我们把黑色的条延长$s$,白色的缩短$ ...

  2. Noip模拟76 2021.10.14

    T1 洛希极限 上来一道大数据结构或者单调队列优化$dp$ 真就没分析出来正解复杂度 正解复杂度$O(q+nm)$,但是据说我的复杂度是假的 考虑一个点转移最优情况是从它上面的一个反$L$形转移过来 ...

  3. Noip模拟51 2021.9.12

    T1 茅山道术 考场上卡在了一个恶心的地方, 当时以为每次施法都会产生新的可以施法的区间,然后想都没细想, 认为不可做,甚至$dfs$也无法打,考后一问发现是自己想多了.. 新产生的区间对答案根本没有 ...

  4. Noip模拟81 2021.10.20

    T1 语言 比较简单的题,然后就瞎写了,所以考场上就我一个写了线段树的,所以我的常数.... 所以就枚举动词的位置,找前面后面有没有出现$4$即可 1 #include<bits/stdc++. ...

  5. Noip模拟57 2021.9.20

    规律总结:联考必爆炸 T1 2A 没$A$掉的大水题,但是是真的不知道$000$前面的$00$也算先导$0$,以后要长记性,这种东西不能再错了 再打三遍: $000$前面的$00$也算先导$0$ $0 ...

  6. Noip模拟70 2021.10.6

    T1 暴雨 放在第一道的神仙题,不同的做法,吊人有的都在用线段树维护$set$预处理 我是直接$dp$的,可能代码的复杂度比那种的稍微小一点 设$f[i][j][p][0/1]$表示考虑了前$i$列, ...

  7. Noip模拟69 2021.10.5

    考场拼命$yy$高精度结果没学好$for$循环痛失$50pts$,当场枯死 以后一定打对拍,要不考后会... T1 石子游戏 首先要知道典型的$NIM$博弈,就是说如果所有堆石子个数的异或和为$0$则 ...

  8. Noip模拟63 2021.9.27(考场惊现无限之环)

    T1 电压机制 把题目转化为找那些边只被奇数环包含. 这样的话直接$dfs$生成一棵树,给每个点附上一个深度,根据其他的非树边都是返祖边 可以算出环内边的数量$dep[x]-dep[y]+1$,然后判 ...

  9. Noip模拟61 2021.9.25

    T1 交通 考场上想了一个$NPC$.应该吧,是要求出图里面的所有可行的不重复欧拉路 无数种做法都无法解出,时间也都耗在这个上面的,于是就考的挺惨的 以后要是觉得当前思路不可做,就试着换一换思路,千万 ...

随机推荐

  1. tomcat快速发布备份脚本

    一.说明 我们每次在tomcat中发布新war包,总是要经历[备份-停机-上传-启动]这几个部分,其中上传的环节和网速有极大相关性,要是网速很慢,那么整个发布的时间就会很长. 如果我们不借助于自动化发 ...

  2. 痞子衡嵌入式:嵌入式Cortex-M中断向量表对齐原则的深入研究

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是Cortex-M中断向量表对齐原则. 今天这篇文章的内容主要来自于五年前做 Kinetis K32W 系列双核启动时的发现,最近正好有同 ...

  3. PHP设计模式之原型模式

    原型模式其实更形象的来说应该叫克隆模式.它主要的行为是对对象进行克隆,但是又把被克隆的对象称之为最初的原型,于是,这个模式就这样被命名了.说真的,从使用方式来看真的感觉叫克隆模式更贴切一些. Gof类 ...

  4. css3 图片变黑白 filter

    /*图片黑白*/ .img-gray { -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: gray ...

  5. Java基础系列(29)- 方法的重载

    方法的重载 重载就是在一个类中,有相同的函数名称,但形参不同的函数 方法重载的规则: 方法名称必须相同 参数列表必须不同(个数不同.或类型不同.参数排列顺序不同等) 方法的返回类型可以相同也可以不相同 ...

  6. 虚拟机启动jenkins,访问提示:该Jenkins实例似乎已离线

    ubuntu虚拟机使用java命令启动jenkins,本地访问提示:该Jenkins实例似乎已离线. https://www.cnblogs.com/du-hong/p/10655635.html 没 ...

  7. adb devices如何连逍遥模拟器的设备

    adb device连接真机,上一篇已经讲过了,这篇讲如何连接模拟器.这里我用的模拟器逍遥模拟器.我先插上手机,另外启动了一个模拟器,直接在cmd中输入adb devices,按理应该有2个设备id, ...

  8. docker network 参数

    一. 格式 docker network COMMAND 二.COMMAND 讲解 2.1 .docker network connect 格式 docker network connect [OPT ...

  9. AT4505-[AGC029F]Construction of a tree【构造题,hall定理,网络流】

    正题 题目链接:https://www.luogu.com.cn/problem/AT4505 题目大意 给出\(n\)个点和\(n-1\)个点集\(U_i\),每个点集中选择两个点连边使得该图是一棵 ...

  10. Spring,IOC源码分析

    有错勿喷 1.首先是Spring,IOC的基本概念 IOC是一个容器 容器启动的时候创建所有单实例对象 我们可以直接从容器中获取到这个对象 2.调试流程 ioc容器的启动过程?启动期间都做了什么(什么 ...