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. IDEA weblogic远程调试

    weblogic远程调试 这里我们使用vulhub的镜像作为初始构建镜像搭建漏洞环境 1. 搭建docker环境 新建一个目录,创建两个文件 DockerFile FROM vulhub/weblog ...

  2. 隐私安全设置:NET:ERR_CERT_AUTHORITY_INVALID message in Chrome.

    背景 访问一个内部网站时,遇到下面的问题,导致网站不能打开:NET:ERR_CERT_AUTHORITY_INVALID message in Chrome.从错误信息来看,这是由于网站的证书问题导致 ...

  3. Oracle体系结构二

  4. Maven专题3——生命周期与插件

    三套生命周期 Maven有3套相互独立的生命周期,用户可以调用某个生命周期的阶段,而不会对其他生命周期产生影响. 每个生命周期包含一些有先后顺序的阶段,后面的阶段依赖于前面的阶段,意味着用户调用后面的 ...

  5. CentOS8部署nextcloud网盘

    Nextcloud是一款开源的存储软件,功能丰富,支持多人协同工作,目前完全免费. 官网:https://www.nextcloud.com 架构:LAMP或LNMP 本文以LAMP为基础 注意:ph ...

  6. 【OI】WERTYU UVa 10082

    题目: A common typing error is to place the hands on the keyboard one row to the right of the correct ...

  7. (转载)Select for update/lock in share mode 对事务并发性影响

    select for update/lock in share mode 对事务并发性影响 事务并发性理解 事务并发性,粗略的理解就是单位时间内能够执行的事务数量,常见的单位是 TPS( transa ...

  8. appium和selenium不同与相同之处

    原文来自: https://www.cnblogs.com/zhengshuheng/p/6370398.html selenium是web端的自动化,appium是app端的自动化,它继承了webd ...

  9. YbtOJ#493-最大分数【斜率优化dp,分治】

    正题 题目链接:http://www.ybtoj.com.cn/contest/117/problem/1 题目大意 \(n\)个数的一个序列,给其中的一些数打上标记. 一个标记方案的贡献为\(s_1 ...

  10. 02-token

    随着互联网技术的发展,cookie+session形式的用户认真逐渐不适应需求的扩展.在当前分布式微服务广泛流行的场景下,显然这种cookie+session无法满足,因为各个服务之间无法相互获取se ...