T1 打地鼠


全场就俩人没切,还有一个是忘关$freopen$了。

$code:$

 1 #include<bits/stdc++.h>
2 #define rin register signed
3 using namespace std;
4 const int NN=2e3+5;
5 int n,k,pre[NN][NN],ans;
6 char ch[NN];
7 inline int read(){
8 int x=0,f=1; char ch=getchar();
9 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
10 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
11 return x*f;
12 }
13 inline void write(int x,char sp){
14 char ch[25]; int len=0;
15 if(x<0){ putchar('-'); x=~x+1; }
16 do{ ch[len++]=x%10+(1<<5)+(1<<4); x/=10; }while(x);
17 for(int i=len-1;~i;i--) putchar(ch[i]); putchar(sp);
18 }
19 signed main(){
20 n=read(); k=read();
21 for(rin i=1;i<=n;i++){
22 scanf("%s",ch+1);
23 for(rin j=1;j<=n;j++)
24 pre[i][j]=pre[i][j-1]+(ch[j]=='1');
25 for(rin j=1;j<=n;j++) pre[i][j]+=pre[i-1][j];
26 }
27 for(int i=0;i<=n-k;i++)
28 for(int j=0;j<=n-k;j++)
29 ans=max(ans,pre[i+k][j+k]+pre[i][j]-pre[i][j+k]-pre[i+k][j]);
30 write(ans,'\n');
31 return 0;
32 }

T1

T2 竞赛图


竞赛图缩点后会形成一条链,因此对一个不强联通的子图$S$,必然存在且只有一个强联通的子图$T$,满足$S-T$中点的边都是$S \to T$的。

考虑通过这个性质用强联通子图更新不强联通子图。预处理出每个子集所有点出边的交集即可。

$code:$

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int NN=24;
4 int t,n,to[1<<NN],S,ans;
5 bool is[1<<NN];
6 inline int read(){
7 int x=0,f=1; char ch=getchar();
8 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
9 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
10 return x*f;
11 }
12 inline void write(int x,char sp){
13 char ch[20]; int len=0;
14 if(x<0){ putchar('-'); x=~x+1; }
15 do{ ch[len++]=x%10+(1<<5)+(1<<4); x/=10; }while(x);
16 for(int i=len-1;~i;i--) putchar(ch[i]); putchar(sp);
17 }
18 signed main(){
19 t=read();
20 while(t--){
21 memset(to,0,sizeof(to)); memset(is,1,sizeof(is));
22 n=read(); to[0]=S=(1<<n)-1; ans=0;
23 for(int i=0;i<n;i++) for(int j=0;j<n;j++)
24 if(read()) to[1<<i]|=1<<j;
25 for(int i=1;i<=S;i++) to[i]=to[i^(i&(-i))]&to[i&(-i)];
26 for(int i=1;i<=S;i++)
27 if(is[i])
28 for(int j=to[i];j;j=(j-1)&to[i]) is[i|j]=0;
29 for(int i=0;i<=S;i++) if(is[i]) ++ans;
30 write(ans,'\n');
31 }
32 return 0;
33 }

T2

T3 糖果


神仙$DP$,没改出来,钴了。

T4 树


$\textit{NOI D1T1}$原题,把黑白边反过来了。

树剖,边权下放,每次修改将路径上点打上时间戳,发现黑边数量其实就是相邻两边时间戳不同的边对数。

一开始建树时要保证所有点的时间戳不同。

$code:$

  1 #include<bits/stdc++.h>
2 using namespace std;
3 const int NN=3e5+5;
4 int q,n,idx,to[NN<<1],nex[NN<<1],head[NN],tp,x,y;
5 int siz[NN],son[NN],top[NN],dfn[NN],fa[NN],dep[NN],cnt,tim;
6 inline int read(){
7 int x=0,f=1; char ch=getchar();
8 while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); }
9 while(ch>='0'&&ch<='9'){ x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
10 return x*f;
11 }
12 inline void write(int x,char sp){
13 char ch[20]; int len=0;
14 if(x<0){ putchar('-'); x=~x+1; }
15 do{ ch[len++]=x%10+(1<<5)+(1<<4); x/=10; }while(x);
16 for(int i=len-1;~i;i--) putchar(ch[i]); putchar(sp);
17 }
18 inline void add(int a,int b){
19 to[++idx]=b; nex[idx]=head[a]; head[a]=idx;
20 to[++idx]=a; nex[idx]=head[b]; head[b]=idx;
21 }
22 void dfs1(int s,int f){
23 siz[s]=1; fa[s]=f; dep[s]=dep[f]+1;
24 for(int i=head[s];i;i=nex[i]){
25 int v=to[i];
26 if(v==f) continue;
27 dfs1(v,s);
28 siz[s]+=siz[v];
29 if(siz[v]>siz[son[s]]) son[s]=v;
30 }
31 }
32 void dfs2(int s,int t){
33 dfn[s]=++cnt; top[s]=t;
34 if(!son[s]) return;
35 dfs2(son[s],t);
36 for(int i=head[s];i;i=nex[i]){
37 int v=to[i];
38 if(v!=fa[s]&&v!=son[s]) dfs2(v,v);
39 }
40 }
41 struct segment_tree{
42 #define ld rt<<1
43 #define rd (rt<<1)|1
44 int sum[NN<<2],lc[NN<<2],rc[NN<<2],laz[NN<<2];
45 void pushup(int rt){
46 sum[rt]=sum[ld]+sum[rd]+(rc[ld]!=lc[rd]);
47 lc[rt]=lc[ld]; rc[rt]=rc[rd];
48 }
49 void pushdown(int rt){
50 if(!laz[rt]) return;
51 laz[ld]=laz[rt]; laz[rd]=laz[rt];
52 sum[ld]=sum[rd]=0;
53 lc[ld]=lc[rd]=rc[ld]=rc[rd]=laz[rt];
54 laz[rt]=0;
55 }
56 void build(int rt,int l,int r){
57 if(l==r){ lc[rt]=rc[rt]=l; return; }
58 int mid=l+r>>1;
59 build(ld,l,mid);
60 build(rd,mid+1,r);
61 pushup(rt);
62 }
63 void modify(int rt,int l,int r,int opl,int opr,int v){
64 if(l>=opl&&r<=opr){
65 sum[rt]=0;
66 lc[rt]=rc[rt]=laz[rt]=v;
67 return;
68 }
69 pushdown(rt);
70 int mid=l+r>>1;
71 if(opl<=mid) modify(ld,l,mid,opl,opr,v);
72 if(opr>mid) modify(rd,mid+1,r,opl,opr,v);
73 pushup(rt);
74 }
75 int query(int rt,int l,int r,int opl,int opr){
76 if(l>=opl&&r<=opr) return sum[rt];
77 pushdown(rt);
78 int mid=l+r>>1;
79 if(opr<=mid) return query(ld,l,mid,opl,opr);
80 else if(opl>mid) return query(rd,mid+1,r,opl,opr);
81 else return query(ld,l,mid,opl,mid)+query(rd,mid+1,r,mid+1,opr)+(lc[rd]!=rc[ld]);
82 }
83 int look(int rt,int l,int r,int pos){
84 if(l==r) return lc[rt];
85 pushdown(rt);
86 int mid=l+r>>1;
87 if(pos<=mid) return look(ld,l,mid,pos);
88 else return look(rd,mid+1,r,pos);
89 }
90 }s;
91 void UPD(int x,int y){
92 int fx=top[x],fy=top[y]; ++tim;
93 while(fx!=fy)
94 if(dep[fx]>dep[fy]){
95 s.modify(1,1,n,dfn[fx],dfn[x],tim);
96 x=fa[fx]; fx=top[x];
97 }
98 else{
99 s.modify(1,1,n,dfn[fy],dfn[y],tim);
100 y=fa[fy]; fy=top[y];
101 }
102 if(dep[x]>dep[y]) s.modify(1,1,n,dfn[y],dfn[x],tim);
103 else s.modify(1,1,n,dfn[x],dfn[y],tim);
104 }
105 int ANS(int x,int y){
106 int ans=0,fx=top[x],fy=top[y];
107 while(fx!=fy)
108 if(dep[fx]>dep[fy]){
109 ans+=s.query(1,1,n,dfn[fx],dfn[x]);
110 ans+=(s.look(1,1,n,dfn[fx])!=s.look(1,1,n,dfn[fa[fx]]));
111 x=fa[fx]; fx=top[x];
112 }
113 else{
114 ans+=s.query(1,1,n,dfn[fy],dfn[y]);
115 ans+=(s.look(1,1,n,dfn[fy])!=s.look(1,1,n,dfn[fa[fy]]));
116 y=fa[fy]; fy=top[y];
117 }
118 if(dep[x]<dep[y]) ans+=s.query(1,1,n,dfn[x],dfn[y]);
119 else ans+=s.query(1,1,n,dfn[y],dfn[x]);
120 return ans;
121 }
122 signed main(){
123 tim=n=read();
124 for(int i=1;i<n;i++) add(read(),read());
125 dfs1(1,0); dfs2(1,1);
126 s.build(1,1,n);
127 q=read();
128 while(q--){
129 tp=read(); x=read(); y=read();
130 if(tp==1) UPD(x,y);
131 if(tp==2) write(ANS(x,y),'\n');
132 }
133 return 0;
134 }

T4

2021.8.14考试总结[NOIP模拟39]的更多相关文章

  1. 2021.9.14考试总结[NOIP模拟53]

    T1 ZYB和售货机 容易发现把每个物品都买成$1$是没有影响的. 然后考虑最后一个物品的方案,如果从$f_i$向$i$连边,发现每个点有一个出度多个入度,可以先默认每个物品都能买且最大获利,这样可以 ...

  2. 2021.9.17考试总结[NOIP模拟55]

    有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...

  3. 2021.9.13考试总结[NOIP模拟52]

    T1 路径 考虑每一位的贡献,第$i$位每$2^i$个数会变一次,那么答案为$\sum_{i=1}^{log_2n} \frac{n}{2^i}$. $code:$ 1 #include<bit ...

  4. 2021.8.11考试总结[NOIP模拟36]

    T1 Dove玩扑克 考场并查集加树状数组加桶期望$65pts$实际$80pts$,考后多开个数组记哪些数出现过,只扫出现过的数就切了.用$set$维护可以把被删没的数去掉,更快. $code:$ 1 ...

  5. 2021.7.29考试总结[NOIP模拟27]

    T1 牛半仙的妹子图 做法挺多的,可以最小生成树或者最短路,复杂度O(cq),c是颜色数. 我考场上想到了原来做过的一道题影子,就用了并查集,把边权排序后一个个插入,记录权值的前缀和,复杂度mlogm ...

  6. 2021.7.15考试总结[NOIP模拟16]

    ZJ模拟D2就是NB.. T1 Star Way To Heaven 谁能想到这竟是个最小生成树呢?(T1挂分100的高人JYF就在我身边 把上边界和下边界看成一个点和星星跑最小生成树,从上边界开始跑 ...

  7. 2021.9.12考试总结[NOIP模拟51]

    T1 茅山道术 仔细观察发现对于每个点只考虑它前面第一个与它颜色相同的点即可. 又仔细观察发现对一段区间染色后以这个区间内点为端点的区间不能染色. 于是对区间右端点而言,区间染色的贡献为遍历到区间左端 ...

  8. 2021.9.9考试总结[NOIP模拟50]

    T1 第零题 神秘结论:从一个点满体力到另一个点的复活次数与倒过来相同. 于是预处理出每个点向上走第$2^i$个死亡点的位置,具体实现可以倍增或二分. 每次询问先从两个点同时向上倍增,都转到离$LCA ...

  9. 2021.9.7考试总结[NOIP模拟49]

    T1 Reverse $BFS$暴力$O(n^2)$ 过程中重复枚举了很多点,考虑用链表记录当前点后面可到达的第一个未更新点. 搜索时枚举翻转子串的左端点,之后便可以算出翻转后$1$的位置. $cod ...

随机推荐

  1. nacos配置中心模块详解

    本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 配置中心 业务上的配置,功能开关,服务治理上对弱依赖的降级,甚至数据库的密码等,都可能用到动态 ...

  2. 274 day04_Map,斗地主案例

      day04 [Map] 主要内容 Map集合 教学目标 [ ] 能够说出Map集合特点 [ ] 使用Map集合添加方法保存数据 [ ] 使用"键找值"的方式遍历Map集合 [ ...

  3. 一起搞懂PHP的错误和异常(一)

    在PHP的学习过程中,我们会接触到两个概念,一个是错误,一个是异常.啥玩意?他们不是一个东西嘛?如果接触过Java.C#之类的纯面向对象语言的同学,可能对异常是没有什么问题,毕竟所有的问题都可以try ...

  4. mysql 复合索引 为什么遵循最左原则

    1,>mysql :多列索引  https://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html 1>,B+树: h ...

  5. 《Android自动化环境搭建》

    一.安装JDK并配置环境变量 1:在Java官网上下载本机系统相对应的jdk文件安装,直接下一步一步到位 2:配置JAVA_HOME 新建 JAVA_HOME 环境变量,变量值是所安装JDK 的路径, ...

  6. Spring Cloud Gateway 没有链路信息,我 TM 人傻了(下)

    本系列是 我TM人傻了 系列第五期[捂脸],往期精彩回顾: 升级到Spring 5.3.x之后,GC次数急剧增加,我TM人傻了 这个大表走索引字段查询的 SQL 怎么就成全扫描了,我TM人傻了 获取异 ...

  7. selenium--常用的获取元素属性

    当我们要设计功能测试用例时,一般会有预期结果,有些预期结果测试人员无法通过肉眼进行判断的.因为自动化测试运行过程是无人值守,一般情况下,脚本运行成功,没有异样信息就标识用户执行成功.那怎么才能知道我打 ...

  8. python基础知识三——try与except处理异常语句

    try/except介绍 与其他语言相同,在python中,try/except语句主要是用于处理程序正常执行过程中出现的一些异常情况,如语法错(python作为脚本语言没有编译的环节,在执行过程中对 ...

  9. H5移动端适配方案-rem

    为什么移动端要适配: 由于移动设备的尺寸不一,所以移动端的页面要能够适应不同尺寸的设备,即页面的自适应,让页面在视觉上保持一致. rem:rem 是css3的一种相对单位,参考是根元素HMTL的fon ...

  10. 洛谷4219 BJOI2014大融合(LCT维护子树信息)

    QWQ 这个题目是LCT维护子树信息的经典应用 根据题目信息来看,对于一个这条边的两个端点各自的\(size\)乘起来,不过这个应该算呢? 我们可以考虑在LCT上多维护一个\(xv[i]\)表示\(i ...