T1 打地鼠

都切掉了的简单题

 1 #include<bits/stdc++.h>
2 #define int long long
3 using namespace std;
4 const int NN=2005;
5 int n,k,g[NN][NN],ans,sum[NN][NN];
6 char s[NN];
7 inline int calc(int x1,int y1,int x2,int y2){
8 return sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1];
9 }
10 namespace WSN{
11 inline short main(){
12 scanf("%lld%lld",&n,&k);
13 for(int i=1;i<=n;i++){
14 scanf("%s",s+1);
15 for(int j=1;j<=n;j++){
16 g[i][j]=s[j]-'0';
17 sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+g[i][j];
18 }
19 }
20 for(int i=1;i<=n-k+1;i++)
21 for(int j=1;j<=n-k+1;j++)
22 ans=max(ans,calc(i,j,i+k-1,j+k-1));
23 printf("%lld\n",ans);
24 return 0;
25 }
26 }
27 signed main(){return WSN::main();}

T2 竞赛图

首先把图中能够当作强联通图的部分缩点来看,

这样化简后的图,如果两个点之间只有一种方向的边,那么他们形成的子图是不合法的

转移的时候用强联通的子集更新非强联通的点集,枚举所有从强联通图出来的边,考虑记录当前枚举的点集合法与否即可

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int NN=25;
4 int T,n,ans,U,to[1<<24];
5 bool bin[1<<24];
6 namespace WSN{
7 inline short main(){
8 scanf("%d",&T);
9 while(T--){
10 memset(to,0,sizeof(to)); memset(bin,1,sizeof(bin));
11 scanf("%d",&n);ans=0;U=(1<<n)-1; to[0]=U;
12 for(int i=0;i<n;i++) for(int j=0,t;j<n;j++){scanf("%d",&t);if(t) to[1<<i]|=1<<j;}
13 for(int s=1,ss;s<=U;s++) ss=s&(-s),to[s]=to[s^ss]&to[ss];
14 for(int s=1;s<=U;s++) if(bin[s])
15 for(int i=to[s];i;i--,i&=to[s]) bin[s|i]=0;
16 for(int s=0;s<=U;s++) ans+=bin[s]; printf("%d\n",ans);
17 }
18 return 0;
19 }
20 }
21 signed main(){return WSN::main();}

T3 糖果

沽沽沽

T4 树

极其类似染色这道题,

我们可以在初始建树的时候给每个点附上一个自己的编号为点权

那么图中的点权范围是从一到$n$的

考虑每次修改操作将路径上的所有点赋值成一个大于$n$的新数,

这样我们可以发现每次对于黑边的查找,实质上是找路径上有几个点对点权不一样

线段树上维护一个$lc,rc,sum$分别表示区间首点权,区间尾点权,区间内黑色边数即可

  1 #include<bits/stdc++.h>
2 using namespace std;
3 const int NN=300001;
4 int n,q,du[NN];
5 int dfn[NN],rk[NN],son[NN],fa[NN],top[NN],siz[NN],dep[NN],cnt;
6 struct SNOW{int to,next;};SNOW e[NN<<1]; int head[NN],rp;
7
8 inline void add(int x,int y){e[++rp]=(SNOW){y,head[x]}; head[x]=rp;}
9 inline void dfs1(int f,int x){
10 fa[x]=f; dep[x]=dep[f]+1; siz[x]=1;
11 for(int i=head[x];i;i=e[i].next){
12 int y=e[i].to;if(y==f) continue;
13 dfs1(x,y);
14 siz[x]+=siz[y];
15 if(siz[son[x]]<siz[y]) son[x]=y;
16 }
17 }
18 inline void dfs2(int x,int t){
19 top[x]=t; dfn[x]=++cnt; rk[cnt]=x;
20 if(son[x]) dfs2(son[x],t);
21 for(int i=head[x];i;i=e[i].next){
22 int y=e[i].to;
23 if(y!=fa[x]&&y!=son[x]) dfs2(y,y);
24 }
25 }
26 struct SNOWtree{
27 #define lid (id<<1)
28 #define rid (id<<1|1)
29 int ll[NN<<2],rr[NN<<2],sm[NN<<2],laz[NN<<2];
30 int lc[NN<<2],rc[NN<<2];
31 inline void pushup(int id){
32 lc[id]=lc[lid]; rc[id]=rc[rid];
33 sm[id]=sm[lid]+sm[rid]+(lc[rid]!=rc[lid]);
34 }
35 inline void pushdown(int id){
36 if(laz[id]==-1 || ll[id]==rr[id]) return;
37 laz[lid]=laz[rid]=laz[id];
38 sm[lid]=sm[rid]=0;
39 lc[lid]=rc[lid]=laz[id];
40 lc[rid]=rc[rid]=laz[id];
41 laz[id]=-1;
42 }
43 inline void build(int id,int l,int r){
44 ll[id]=l; rr[id]=r; laz[id]=-1;
45 if(l==r){lc[id]=rc[id]=l;return;}
46 int mid=l+r>>1;
47 build(lid,l,mid); build(rid,mid+1,r);
48 pushup(id);
49 }
50 inline void change(int id,int l,int r,int v){
51 if(l<=ll[id]&&rr[id]<=r){lc[id]=rc[id]=laz[id]=v;sm[id]=0;return;}
52 pushdown(id); int mid=ll[id]+rr[id]>>1;
53 if(l<=mid) change(lid,l,r,v);
54 if(r>mid) change(rid,l,r,v);
55 pushup(id);
56 }
57 inline int query(int id,int l,int r){
58 if(l<=ll[id]&&rr[id]<=r) return sm[id];
59 pushdown(id); int mid=ll[id]+rr[id]>>1,ans=0;
60 if(r<=mid) return query(lid,l,r);
61 if(l>mid) return query(rid,l,r);
62 return query(lid,l,mid)+query(rid,mid+1,r)+(lc[rid]!=rc[lid]);
63 }
64 inline int look(int id,int pos){
65 if(ll[id]==rr[id]) return lc[id];
66 pushdown(id); int mid=ll[id]+rr[id]>>1;
67 if(pos<=mid) return look(lid,pos);
68 else return look(rid,pos);
69 }
70 }tr;
71 inline void update(int x,int y,int v){
72 while(top[x]!=top[y]){
73 if(dep[top[x]]<dep[top[y]]) swap(x,y);
74 tr.change(1,dfn[top[x]],dfn[x],v);
75 x=fa[top[x]];
76 }if(dfn[x]>dfn[y]) swap(x,y);
77 tr.change(1,dfn[x],dfn[y],v);
78 }
79 inline int query(int x,int y){
80 int sum=0;
81 while(top[x]!=top[y]){
82 if(dep[top[x]]<dep[top[y]]) swap(x,y);
83 sum+=tr.query(1,dfn[top[x]],dfn[x])+(tr.look(1,dfn[top[x]])!=tr.look(1,dfn[fa[top[x]]]));
84 x=fa[top[x]];
85 }if(dfn[x]>dfn[y]) swap(x,y);
86 sum+=tr.query(1,dfn[x],dfn[y]);
87 return sum;
88 }
89 namespace WSN{
90 inline short main(){
91 /* freopen("1.in","r",stdin);
92 freopen("1.out","w",stdout);*/
93 scanf("%d",&n);
94 for(int i=1,x,y;i<n;i++){
95 scanf("%d%d",&x,&y);
96 add(x,y); add(y,x);
97 }
98 int color=n; scanf("%d",&q);
99 dfs1(0,1); dfs2(1,1); tr.build(1,1,n);
100 while(q--){
101 int typ,x,y;scanf("%d%d%d",&typ,&x,&y);
102 if(typ==1){
103 update(x,y,++color);
104 /*for(int i=1;i<=n*4;i++) if(tr.ll[i]) cout<<tr.ll[i]<<" "<<tr.rr[i]<<" "<<tr.pr[i]<<" "<<tr.nx[i]<<" "<<tr.co[i]<<" "<<tr.laz[i]<<endl;*/
105 }
106 if(typ==2) printf("%d\n",query(x,y));
107 }
108 return 0;
109 }
110 }
111 signed main(){return WSN::main();}

Noip模拟39 2021.8.14的更多相关文章

  1. Noip模拟76 2021.10.14

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

  2. Noip模拟53 2021.9.14

    T1 ZYB和售货机 首先这道题有两种做法. 一种是发现每个点都可以先被取到只剩一个,只要收益大于$0$ 然后发现建一个$i->f[i]$的图时出现环,要把它去掉, 那么跑一个$tarjan$枚 ...

  3. Noip模拟15 2021.7.14

    T1 夜莺与玫瑰 题目越发的变态起来... 这题刚开始看超级像仪仗队,好不容易码完欧拉函数后尝试×2后输出但不对!! 于是选择了跳过.... 正解居然是莫比乌斯函数....我也是醉了 预处理完就剩下$ ...

  4. 2021.8.14考试总结[NOIP模拟39]

    T1 打地鼠 全场就俩人没切,还有一个是忘关$freopen$了. $code:$ 1 #include<bits/stdc++.h> 2 #define rin register sig ...

  5. Noip模拟70 2021.10.6

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

  6. Noip模拟69 2021.10.5

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

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

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

  8. Noip模拟61 2021.9.25

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

  9. Noip模拟59 2021.9.22

    新机房首模拟变倒数 T1 柱状图 关于每一个点可以做出两条斜率分别为$1,-1$的直线, 然后题意转化为移动最少的步数使得所有点都在某一个点的两条直线上 二分出直线的高度,判断条件是尽量让这条直线上部 ...

随机推荐

  1. DHCP的原理和配置

    前言 在大型企业网络中,会有大量的主机或设备需要获取IP地址等网络参数.如果采用手工配置,工作量大且不好管理,如果有用户擅自修改网络参数,还有可能会造成 IP地址冲突等问题.使用动态主机配置协议DHC ...

  2. Spring Boot 入门系列(二十八) JPA 的实体映射关系,一对一,一对多,多对多关系映射!

    前面讲了Spring Boot 使用 JPA,实现JPA 的增.删.改.查的功能,同时也介绍了JPA的一些查询,自定义SQL查询等使用.JPA使用非常简单,功能非常强大的ORM框架,无需任何数据访问层 ...

  3. FastAPI(4)- get 请求 - 路径参数 Path Parameters

    什么是路径 假设一个 url 是: http://127.0.0.1:8080/items/abcd 那么路径 path 就是 /items/abcd 路径参数 就是将路径上的某一部分变成参数,可通过 ...

  4. ZBLOG PHP调用相关文章列表以及上一篇下一篇文章代码

    如果是比较小的个人博客.专题类网站项目,老蒋还是比较喜欢使用ZBLOG PHP程序的,无论是轻便度还是易用性上比WordPress简单很多,虽然WP的功能很强大,比如强大的插件和主题丰富功能是当前最为 ...

  5. 机器学习——主成分分析(PCA)

    1 前言 PCA(Principal Component Analysis)是一种常用的无监督学习方法,是一种常用的数据分析方法. PCA 通过利用 正交变换 把由 线性相关变量 表示的观测数据转换为 ...

  6. request,response统一编码

    方法:统一使用编码(例如UTF-8编码)解决session或jsp等各种值传递时的中文乱码问题 request.setCharacterEncoding("UTF-8"); res ...

  7. Sentry 监控 - Environments 区分不同部署环境的事件数据

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  8. PHP中的强制类型转换

    学过静态语言开发的朋友对类型转换不会陌生,比如Java.C#.C++等.静态语言的好处就是变量强制必须指定类型,这也是编译的要求,所以大部分编译型的语言都会有强制变量类型的要求.而PHP据说也会在PH ...

  9. DEDECMS首页循环调用一级栏目和二级栏目的实现方法

    调用方法: {dede:channelartlist typeid='2'} <li class="First"><a href="{dede:fiel ...

  10. Java基础系列(19)- Switch结构

    package struct; public class SwitchDemo01 { //case穿透 //switch 匹配一个具体的值 public static void main(Strin ...