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. 下载excel(接收文件流)

    /**  * 文件流转换 主要代码块,可自定义下载文件名称  * @param {} data  */ export function download(data, titName) {   if ( ...

  2. Playfield 类方法的注释

    前言 本篇随笔的底包采用的是百度炉石兄弟吧20200109折腾版中自带的 routines 文件. 本次仅为绝大多数方法添加 xml 注释和简单解析,没有具体解析与重构. Playfield 类方法众 ...

  3. Django学习day15BBS项目开发3.0

    每日测验 """ 今日考题 1.django admin作用及用法 2.media配置如何实现,基于该配置能够做到什么以及需要注意什么 3.阐述博客园为何支持用户自定义个 ...

  4. 学习PHP中Fileinfo扩展的使用

    今天来学习的这个扩展其实现在也已经是标配的一个扩展了,为什么呢?因为 Laravel 框架在安装的时候它就是必须的一个扩展,没有打开它的话,连 Laravel 框架都是无法使用的. Fileinfo ...

  5. PHP的LZF压缩扩展工具

    这次为大家带来的是另外一个 PHP 的压缩扩展,当然也是非常冷门的一种压缩格式,所以使用的人会比较少,而且在 PHP 中提供的相关的函数也只是对字符串的编码与解码,并没有针对文件的操作.因此,就像 B ...

  6. ecshop增加调用字段问题汇总

    一.ecshop文章列表页调用缩略图.网页描述等 打开includes/lib_article.php文件,大约在69行 添加 $arr[$article_id]['description'] = $ ...

  7. aws中centos登陆连接设置

    第一步:使用aws密钥文件(.pem)登陆(*在shell中需使用新建的会话,不能直接,使用原来的会话进行修改,否则无法进入) 点击浏览器,点添加,再点击导入,选择.pem 文件 第二步: 登陆后,使 ...

  8. django如何加载外部文件

    django如何加载外部文件(环境:pycharm python2.7 django1.11) 有一份新的文件夹名为:py_aiplat_demo,内含有多个文件夹(SDK,demo,data). 1 ...

  9. 在自己的项目中使用PCL

    在自己的项目中使用PCL项目设置:1.创建cpp文件,如pcd_write.cpp,文件内容如下例: #include <iostream>#include <pcl/io/pcd_ ...

  10. 鸿蒙内核源码分析(CPU篇) | 整个内核就是一个死循环 | 祝新的一年牛气冲天 ! | v32.02

    百篇博客系列篇.本篇为: v32.xx 鸿蒙内核源码分析(CPU篇) | 整个内核就是一个死循环 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度 ...