11.7 NOIP总复习总结
好像要1A模板题。完败
下面主要是一波SB错误总结
最小生成树(忘了sort(QwQ))
// It is made by XZZ
// Fei Fan Ya Xi Lie~~~
#include<cstdio>
#include<algorithm>
using namespace std;
#define il inline
#define rg register
#define vd void
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
struct frog{int a,b,c;}p[200001];
il bool operator <(const frog&a,const frog&b){return a.c<b.c;}
int fa[5001];
il int hd(const int&a){return a==fa[a]?a:fa[a]=hd(fa[a]);}
int main(){
// freopen("3366.in","r",stdin);
// freopen("3366.out","w",stdout);
int n=gi(),m=gi()+1;
for(rg int i=1;i<m;++i)p[i].a=gi(),p[i].b=gi(),p[i].c=gi();
sort(p+1,p+m+1);
for(rg int i=1;i<=n;++i)fa[i]=i;
int orz=1;long long ans=0;
for(rg int i=1;i<n;++i){
while((orz^m)&&hd(p[orz].a)==hd(p[orz].b))++orz;
if(orz==m){puts("orz");return 0;}
fa[hd(p[orz].b)]=hd(p[orz].a);
ans+=p[orz].c;
}
printf("%lld\n",ans);
return 0;
}
SB并查集(按秩合并应该不会卡)
// It is made by XZZ
// Fei Fan Ya Xi Lie~~~
#include<cstdio>
#include<algorithm>
using namespace std;
#define il inline
#define rg register
#define vd void
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
int fa[10001];
il int hd(const int&a){return a==fa[a]?a:fa[a]=hd(fa[a]);}
int main(){
// freopen("3367.in","r",stdin);
// freopen("3367.out","w",stdout);
int n=gi(),m=gi(),opt,x,y;
for(rg int i=1;i<=n;++i)fa[i]=i;
while(m--){
opt=gi(),x=gi(),y=gi();
if(opt==1)fa[hd(x)]=hd(y);
else printf("%c\n","NY"[hd(x)==hd(y)]);
}
return 0;
}
字符串哈希
用set维护即可。防冲突用了pair,防T用了一个自然溢
// It is made by XZZ
// Fei Fan Ya Xi Lie~~~
#include<cstdio>
#include<algorithm>
#include<set>
#include<cstring>
using namespace std;
#define il inline
#define rg register
#define vd void
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
char str[233333];
set<pair<long long,unsigned> >st;
int main(){
// freopen("3370.in","r",stdin);
// freopen("3370.out","w",stdout);
int n=gi(),ans=0,len;
long long A,bs;unsigned B,BS;
while(n--){
scanf("%s",str+1),len=strlen(str+1);
A=0,B=0;bs=BS=1;
for(rg int i=1;i<=len;++i){
A=(A+bs*str[i])%998244353;
B+=BS*str[i];
bs=bs*19260817%998244353;
BS*=2333;
}
#ifdef xzz
printf("%s %lld %u\n",str+1,A,B);
#endif
if(st.find(make_pair(A,B))==st.end())++ans,st.insert(make_pair(A,B));
}
printf("%d\n",ans);
return 0;
}
单源最短路
似乎是常数较小的spfa。dij懒得写了
// It is made by XZZ
// Fei Fan Ya Xi Lie~~~
#include<cstdio>
#include<algorithm>
#include<set>
#include<cstring>
using namespace std;
#define il inline
#define rg register
#define vd void
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
const int maxn=10001,maxm=500001;
int fir[maxn],dis[maxm],nxt[maxm],w[maxm],id;
il vd add(const int&a,const int&b,const int&c){nxt[++id]=fir[a],fir[a]=id,dis[id]=b,w[id]=c;}
il vd SPFA(long long*dist,int S){
static int que[maxn],hd,tl,x;
static bool inque[maxn]={0};
hd=tl=0;que[tl++]=S;inque[S]=1;
dist[S]=0;
while(hd^tl){
x=que[hd];
for(rg int i=fir[x];i;i=nxt[i])
if(dist[dis[i]]>dist[x]+w[i]){
dist[dis[i]]=dist[x]+w[i];
if(!inque[dis[i]]){
inque[dis[i]]=1;
que[tl++]=dis[i];
if(tl==maxn)tl=0;
}
}
++hd;if(hd==maxn)hd=0;
inque[x]=0;
}
}
int main(){
// freopen("3371.in","r",stdin);
// freopen("3371.out","w",stdout);
int n=gi(),m=gi(),s=gi(),x,y,z;
while(m--)x=gi(),y=gi(),z=gi(),add(x,y,z);
static long long dist[maxn];
for(rg int i=1;i<=n;++i)dist[i]=1e15;
SPFA(dist,s);
for(rg int i=1;i<=n;++i){
if(dist[i]==1e15)dist[i]=2147483647;
printf("%lld ",dist[i]);
}
return 0;
}
缩点+DP
tarjan大家都会了吧。vector存新图
// It is made by XZZ
// Fei Fan Ya Xi Lie~~~
#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
#define il inline
#define rg register
#define vd void
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
const int maxn=10001,maxm=100001;
int fir[maxn],dis[maxm],nxt[maxm],id;
il vd add(const int&a,const int&b){nxt[++id]=fir[a],fir[a]=id,dis[id]=b;}
int w[maxn],W[maxn],fr[maxn],top;
int dfn[maxn],low[maxn];
set<int>T[maxn];
int stk[maxn];bool instk[maxn];
il vd tarjan(const int&x){
dfn[x]=low[x]=++dfn[0];
stk[++top]=x;instk[x]=1;
for(int i=fir[x];i;i=nxt[i])
if(!dfn[dis[i]])tarjan(dis[i]),low[x]=min(low[x],low[dis[i]]);
else if(instk[dis[i]])low[x]=min(low[x],dfn[dis[i]]);
if(low[x]==dfn[x]){
do{
instk[stk[top]]=0;
fr[stk[top]]=fr[0];
W[fr[0]]+=w[stk[top]];
--top;
}while(stk[top+1]^x);
++fr[0];
}
}
ll f[maxn];
il ll dp(int x){
if(f[x])return f[x];
f[x]=0;
for(set<int>::iterator it=T[x].begin();it!=T[x].end();++it)
f[x]=max(f[x],dp(*it));
f[x]+=W[x];
return f[x];
}
int main(){
// freopen("3387.in","r",stdin);
// freopen("3387.out","w",stdout);
int n=gi()+1,m=gi(),u,v;
for(rg int i=1;i<n;++i)w[i]=gi();
while(m--)u=gi(),v=gi(),add(u,v);
fr[0]=1;
for(rg int i=1;i<n;++i)if(!dfn[i])tarjan(i);
for(rg int i=1;i<n;++i)
for(rg int j=fir[i];j;j=nxt[j])
if(fr[i]^fr[dis[j]])T[fr[dis[j]]].insert(fr[i]);
ll ans=0;
for(rg int i=1;i<fr[0];++i)ans=max(ans,dp(i));
printf("%lld\n",ans);
return 0;
}
ST表
SB错误犯几次,我还说这是我打的最熟的东西。QwQ
SB错误:预处理log时没想清
for(rg int i=2;i<n;++i)
if(1<<log[i-1]+1==i)log[i]=log[i-1]+1;
else log[i]=log[i-1];
代码:
// It is made by XZZ
// Fei Fan Ya Xi Lie~~~
#include<cstdio>
#include<algorithm>
using namespace std;
#define il inline
#define rg register
#define vd void
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
int st[17][100001];
int log[100001];
int main(){
// freopen("3865.in","r",stdin);
// freopen("3865.out","w",stdout);
int n=gi()+1,m=gi(),Log;
for(rg int i=2;i<n;++i)
if(1<<log[i-1]+1==i)log[i]=log[i-1]+1;
else log[i]=log[i-1];
for(rg int i=1;i<n;++i)st[0][i]=gi();
Log=log[n-1]+1;
for(rg int i=1;i<Log;++i)
for(rg int j=n-(1<<i)+1;j;--j)
st[i][j]=max(st[i-1][j],st[i-1][j+(1<<(i-1))]);
int l,r,lg;
while(m--){
l=gi(),r=gi(),lg=log[r-l+1];
printf("%d\n",max(st[lg][l],st[lg][r-(1<<lg)+1]));
}
return 0;
}
LCA
这个不1A我真是SB了。
// It is made by XZZ
// Fei Fan Ya Xi Lie~~~
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define il inline
#define rg register
#define vd void
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
int st[19][500001],_log,n,m,rt;
const int maxn=500001,maxm=1000001;
int fir[maxn],dis[maxm],nxt[maxm],dep[maxn],id;
il vd add(const int&a,const int&b){nxt[++id]=fir[a],fir[a]=id,dis[id]=b;}
il vd dfs(const int&x){
for(rg int i=fir[x];i;i=nxt[i])
if(dis[i]^st[0][x])st[0][dis[i]]=x,dep[dis[i]]=dep[x]+1,dfs(dis[i]);
}
il int LCA(int a,int b){
if(dep[a]<dep[b])swap(a,b);
for(rg int i=_log;~i;--i)if(dep[st[i][a]]>dep[b])a=st[i][a];
if(dep[a]^dep[b])a=st[0][a];
for(rg int i=_log;~i;--i)if(st[i][a]^st[i][b])a=st[i][a],b=st[i][b];
if(a^b)a=st[0][a];
return a;
}
int main(){
// freopen("lca.in","r",stdin);
// freopen("lca.out","w",stdout);
n=gi(),m=gi(),rt=gi();
int u,v;
for(rg int i=1;i<n;++i)u=gi(),v=gi(),add(u,v),add(v,u);
_log=log2(n);
dfs(rt);
for(rg int i=1;i<=_log;++i)
for(rg int j=1;j<=n;++j)
st[i][j]=st[i-1][st[i-1][j]];
while(m--)printf("%d\n",LCA(gi(),gi()));
return 0;
}
线性筛
才发现不会,来学一下。
大概是每个合数用最大的那个因子筛掉。
要加if(i%prime[j]==0)break
剪枝。
总复习再看一轮吧(肯定理解不了辣 背背板子吧QwQ)
// It is made by XZZ
// Fei Fan Ya Xi Lie~~~
#include<cstdio>
#include<algorithm>
using namespace std;
#define il inline
#define rg register
#define vd void
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
bool yes[10000001];
int prime[2333333];
const char out[][233]={"Yes","No"};
int main(){
// freopen("3383.in","r",stdin);
// freopen("3383.out","w",stdout);
int n=gi()+1,m=gi();
yes[0]=yes[1]=1;
prime[0]=1;
for(rg int i=2;i<n;++i){
if(yes[i]==0)prime[prime[0]++]=i;
for(rg int j=1;j<prime[0]&&i*prime[j]<n;++j){
yes[i*prime[j]]=1;
if(i/prime[j]*prime[j]==i)break;
}
}
while(m--)puts(out[yes[gi()]]);
return 0;
}
割点
洛谷数据有bug,用的城市的备用交换机
// It is made by XZZ
// Fei Fan Ya Xi Lie~~~
#include<cstdio>
#include<algorithm>
using namespace std;
#define il inline
#define rg register
#define vd void
typedef long long ll;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
const int maxn=100010,maxm=maxn<<1;
int fir[maxn],nxt[maxm],dis[maxm],id;
il vd add(const int&a,const int&b){nxt[++id]=fir[a],fir[a]=id,dis[id]=b;}
bool yes[maxn];
int dfn[maxn],low[maxn];
int cnt=0;
il vd tarjan(const int&x){
dfn[x]=low[x]=++dfn[0];
for(int i=fir[x];i;i=nxt[i])
if(!dfn[dis[i]]){
tarjan(dis[i]),low[x]=min(low[x],low[dis[i]]);
if(low[dis[i]]>=dfn[x]){
if(x==1)++cnt;
else yes[x]=1;
}
}
else low[x]=min(low[x],dfn[dis[i]]);
if(x==1)yes[x]=cnt>1;
}
int main(){
// freopen("3388.in","r",stdin);
// freopen("3388.out","w",stdout);
int n=gi(),u,v;
while(scanf("%d%d",&u,&v)==2)add(u,v),add(v,u);
tarjan(1);
int tot=0;
for(rg int i=1;i<=n;++i)if(yes[i])++tot;
printf("%d\n",tot);
for(rg int i=1;i<=n;++i)if(yes[i])printf("%d\n",i);
return 0;
}
11.7 NOIP总复习总结的更多相关文章
- NOIp知识点复习——最短路计数
$Mingqi\_H$ NOIp 2017考挂了...gg 重新开始好了. 计划明年2月24号前复习完所有的NOIp知识点(毕竟很不熟练啊),之后到七月底前学习完省选的东西(flag?). 从现在开始 ...
- EF6 在原有数据库中使用 CodeFirst 总复习(三、重建迁移)
本来原来学的时候,挺顺利的,没想到再次使用,还是遇到很多问题,导致更新失败,所以,只能重建迁移,免得看着乱乱的. 一.删除迁移,将数据恢复到(一)结束状态 1.删除文件夹 2.删除表 3.删除列 4. ...
- EF6 在原有数据库中使用 CodeFirst 总复习(五、生成发帖页面)
有点与在原有数据库中使用 CodeFirst 远了,不过是总复习吗,总得全面点. 一.在用户表(Users)中插入两个用户 二.生成发帖界面 MVC生成的界面很多,也没使用Ajax,实际开发中很少会使 ...
- DAY25、面向对象总复习
面向对象总复习:面向过程编程思想: 核心是 过程 二字, 过程指的是解决问题的步骤是,即先干什么再干什么. 基于该编程思想编写程序,相当于一条流水线,一种机械式的思维方式. 面向对象编程思想: 核心是 ...
- 11.7 NOIP模拟赛
目录 2018.11.7 NOIP模拟 A 序列sequence(two pointers) B 锁lock(思路) C 正方形square(埃氏筛) 考试代码 B C 2018.11.7 NOIP模 ...
- python 学习第二周总复习
目录 数据类型内置方法 数字类型内置方法 整型 浮点型 字符串类型内置方法 列表类型内置方法 元祖类型内置方法 字典类型内置方法 集合类型内置方法 布尔类型 数据类型总结 拷贝 浅拷贝 深拷贝 053 ...
- 11/1 NOIP 模拟赛
11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...
- NOIP专题复习1 图论-最短路
一.知识概述 今天我们要复习的内容是图论中的最短路算法,我们在这里讲3种最短路求法,分别是:floyd,dijkstra,spfa. 那么我们从几道例题来切入今天讲解的算法. 二.典型例题 1.热浪 ...
- noip初赛复习总纲
初赛复习总纲 目录 初赛复习总纲 计算机发展史 计算机的分类 计算机的应用 操作系统盘点 计算机的基本结构 中央处理器(**CPU**--**Central Processing Unit**) 存储 ...
随机推荐
- UIWindow,UINavigationController与UIViewController之间的关系
UIWindow,UINavigationController与UIViewController之间的关系 虽然每次你都用UINavigationController与UIWindow,但你不一定知道 ...
- app数据加密方法
由于项目涉及到注册和登录,所以我了解一下现在app使用比较广泛的几种密码加密方法,可以当作参考,以下都是在python3.5的环境下使用这些算法的例子. 1.base64 Base64是一种基于64个 ...
- Flex布局及其应用
什么是弹性盒子? 弹性盒子是 CSS3 的一种新的布局模式.相对于传统的依赖于display+position+float的布局方式,弹性盒子更加以有效的方式来对一个容器中的子元素进行排列.对齐和分配 ...
- 【译文】MySQL InnoDB 使用的锁分析
InnoDB 使用的 锁类型 共享锁和排它锁 意向锁 记录锁 间隙锁 Next-key 锁 插入意向锁 AUTO-INC 锁 共享锁和排他锁 InnoDB实现了俩个标准的行级锁,共享锁和排它锁. 共享 ...
- 什么是AOP-面向交叉业务编程
一.AOP(Aspect-oriented programming,面向切面编程): 什么是AOP? 定义:将程序中的交叉业务逻辑提取出来,称之为切面.将这些切面动态织入到目标对象,然后生成一个代理对 ...
- swift的异常处理:本质是错误信息的传递方式
func response(from resultObject: Any) throws -> Response { guard let dict = resultObject as? [Str ...
- 1015. [JSOI2008]星球大战【并查集】
Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通 ...
- P4197 Peaks
题目描述 在Bytemountains有N座山峰,每座山峰有他的高度\(h_i\).有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点 ...
- Windows7下配置JMeter安装环境
JMeter配置安装 1.安装JDK环境 下载地址:http://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-21 ...
- PAT乙级1021
1021 个位数统计 (15 分) 给定一个 k 位整数 N=dk−110k−1+⋯+d1101+d0 (0≤di≤9, i=0,⋯,k−1, dk−1& ...