noip考前模板大整理
//归并排序求逆序对 #include<bits/stdc++.h> #define ll long long using namespace std; ]; ll ans; ]; void merge_sort(int l,int r) { if(l==r)return; ; ,cnt=l; merge_sort(l,mid); merge_sort(mid+,r); while(i<=mid&&j<=r) { if(a[i]<=a[j])b[cnt++]=a[i++]; else { b[cnt++]=a[j++]; ans+=(mid-i+); } } while(i<=mid)b[cnt++]=a[i++]; while(j<=r)b[cnt++]=a[j++]; for(register int s=l; s<=r; ++s)a[s]=b[s]; } int main() { scanf("%d",&n); ; i<=n; ++i) { scanf("%d",&a[i]); } merge_sort(,n); printf("%lld",ans); ; } //SPFA模板pre为记录路径,同dij #include<bits/stdc++.h> using namespace std; int n,m; ]; ]; int a,b,v,siz; ],lu[]; ]; struct node { int v,dis,next; } e[]; void add(int u,int v,int dis) { ++cnt; e[cnt].v=v; e[cnt].dis=dis; e[cnt].next=head[u]; head[u]=cnt; } void print(int nn) { )return; else { lu[++siz]=pre[nn]; print(pre[nn]); } } void SPFA() { memset(book,false,sizeof(book)); memset(dist,0x3f,sizeof(dist)); queue<int>q; q.push(); book[]=; //pre[1]=0; dist[]=; while(!q.empty()) { int u=q.front(); q.pop(); book[u]=; for(register int i=head[u]; i; i=e[i].next) { int v=e[i].v; if(dist[v]>dist[u]+e[i].dis) { dist[v]=dist[u]+e[i].dis; pre[v]=u; if(!book[v]) { q.push(v); book[v]=; } } } } } int main() { scanf("%d%d",&n,&m); ; i<=m; ++i) { scanf("%d%d%d",&a,&b,&v); add(a,b,v); } SPFA(); printf("%d\n",dist[n]); print(n); ; --i) printf("%d->",lu[i]); cout<<n; ; } //SPFA判负环 int tim[maxn]; bool spfa(int s) { d[s]=; q.push(s); used[s]=; while(!q.empty()) { int x=q.front(); q.pop(); used[x]=; for(int i=first[x]; i; i=next[i]) { int u=hh[i].t; if(d[u]>d[x]+hh[i].c) { d[u]=d[x]+hh[i].c; if(!used[u]) { if(++tim[u]>n) return false; q.push(u); used[u]=; } } } } return true; } //DIJ模板 #include<iostream> #include<cstdio> #include<cstring> #define maxn 10009 #define inf 2147483647 using namespace std; int n,m,s,sumedge; int dis[maxn],vis[maxn],head[maxn]; struct Edge { //邻接表储存 int x,y,z,nxt; Edge(,,,): x(x),y(y),z(z),nxt(nxt) {} } edge[maxn*]; void add(int x,int y,int z) { edge[++sumedge]=Edge(x,y,z,head[x]); head[x]=sumedge; } void di() { ; i<=n; i++)dis[i]=inf; dis[s]=; ; i<=n; i++) { int k,mn=inf; ; j<=n; j++) { if(!vis[j]&&dis[j]<mn) { mn=dis[j]; k=j; } } if(mn==inf)break; vis[k]=true; for(int j=head[k]; j; j=edge[j].nxt) { int v=edge[j].y; if(!vis[v]&&dis[v]>dis[k]+edge[j].z) dis[v]=dis[k]+edge[j].z; } } } int main() { scanf("%d%d%d",&n,&m,&s); ; i<=m; i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); add(x,y,z); } di(); ; i<=n; i++)printf("%d ",dis[i]); ; } //floyd memset(dis,0x3f,sizeof(dis)); ; i<=n; i++)dis[i][i]=; ; k<=n; k++) ; i<=n; i++) ; j<=n; j++) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); //最小生成树kruskal #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define N 5020 #define M 200008 using namespace std; int n,m,ans; int tot; int fa[N]; struct E { int x,y,z; } e[M]; bool cmp(E a,E b) { return a.z<b.z; } int f(int x) { return fa[x]==x?x:fa[x]=f(fa[x]); } int main() { scanf("%d%d",&n,&m); ; i<=m; i++)scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].z); ; i<=n; i++)fa[i]=i; sort(e+,e+m+,cmp); ; i<=m; i++) { int x=e[i].x,y=e[i].y; int fx=f(x),fy=f(y); if(fx!=fy) { fa[fx]=fy; ans+=e[i].z; )break; } } )cout<<"orz\n"; else printf("%d\n",ans); ; } //欧拉筛法 void prime() { check[]=; ; i<=n; i++) { if(!check[i])prim[++cnt]=i;//这个if语句后面没有大括号!! ; j<=cnt&&prim[j]*i<=n; j++) { check[i*prim[j]]=true; )break; } } } //素数判断 bool check(int x) { )return false; ; i*i<=x; i++) )return false; return true; } //gcd int gcd(int x,int y) { ?x:gcd(y,x%y); } //多组gcd预处理 #include<iostream> #include<cstdio> using namespace std; ][]; int main() { scanf("%d",&n); ; i<=n; i++) { g[i][i]=i; g[i][]=g[][i]=i; ; j<i; j++) { g[j][i]=g[i][j]=g[j][i%j]; } } ; } //最长回文串 #include<cstdio> #include<cstring> #include<iostream> using namespace std; ; ],str[maxn*]; ],len; void getstr() { ; str[k++]='$'; ; i<len; i++) str[k++]='#', str[k++]=s[i]; str[k++]='#'; len=k; } void Manacher() { getstr(); ,id; ; i<len; i++) { *id-i],mx-i); ; while(str[i+Len[i]]==str[i-Len[i]]) Len[i]++; if(Len[i]+i>mx) mx=Len[i]+i,id=i; } } int main() { scanf("%s",&s); len=strlen(s); Manacher(); ; ; i<len; i++) ans=max(ans,Len[i]); printf(); ; } //分解质因素 #include<iostream> #include<cstdio> #include<cstdlib> using namespace std; int main() { long long n; scanf("%lld",&n); ; i<=n; i++) { while(n!=i) { ) { printf("%lld*",i); n=n/i; } else break; } } printf("%lld",n); ; } //求树上两点距离,无向图根节点随意,有向的根入度为0 #include<bits/stdc++.h> using namespace std; int n; ]; ]; ]; ],cnt; ]; struct node { int v,w,next; } e[]; inline void add(int u,int v,int w) { e[++cnt].next=head[u]; e[cnt].v=v; e[cnt].w=w; head[u]=cnt; } inline void Deep_pre(int x,int dep) {//求深度 deep[x]=dep; for(register int i=head[x]; i; i=e[i].next) { if(e[i].v==fa[x]) continue; fa[e[i].v]=x; dist[e[i].v]=dist[x]+e[i].w; Deep_pre(e[i].v,dep+); } } inline int lca(int x,int y) {//暴力lca if(deep[x]>deep[y])swap(x,y); while(deep[x]!=deep[y]) { y=fa[y]; } while(x!=y) { x=fa[x]; y=fa[y]; } return x; } int main() { scanf("%d",&n); ,u,v,w; i<n; ++i) { scanf("%d%d%d",&u,&v,&w); add(u,v,w); add(v,u,w); } ; fa[root]=; Deep_pre(root,); int m,ui,vi; scanf("%d",&m); ; i<=m; ++i) { scanf("%d%d",&ui,&vi); int LCA=lca(ui,vi); // printf("%d\n",deep[ui]+deep[vi]-2*deep[LCA]);//两点距离 printf(*dist[LCA]);//两点距离 } ; } //Tarjan lca #include<bits/stdc++.h> #define ll long long using namespace std; int n,m,s; ],hd[]; int x,y,u,v,cnt,cnt1; ]; ],ans[]; struct node { int v,next; } e[<<]; struct edge { int v,next,num; } ee[<<]; inline int find(int x) { return x==fa[x]?x:fa[x]=find(fa[x]); } inline void Union(int x,int too) { int r1=find(x),r2=find(too); if(r1!=r2)fa[r2]=r1; } inline void add(int u,int v) { e[++cnt].next=head[u]; e[cnt].v=v; head[u]=cnt; } inline void ask(int u,int v,int num) { ee[++cnt1].next=hd[u]; ee[cnt1].num=num; ee[cnt1].v=v; hd[u]=cnt1; } inline void dfs(int x) { vis[x]=true; for(register int i=hd[x]; i; i=ee[i].next) { if(vis[ee[i].v])ans[ee[i].num]=find(ee[i].v); } for(register int i=head[x]; i; i=e[i].next) { if(!vis[e[i].v]) { dfs(e[i].v); Union(x,e[i].v); } } } int main() { memset(vis,false,sizeof(vis)); scanf("%d%d%d",&n,&m,&s); ; i<=n; ++i)fa[i]=i; ; i<n; ++i) { scanf("%d%d",&x,&y); add(x,y); add(y,x); } ; i<=m; ++i) { scanf("%d%d",&u,&v); ask(u,v,i); ask(v,u,i); } dfs(s); ; i<=m; ++i)printf("%d\n",ans[i]); ; } //快速米 ll qpow(ll x,ll y,ll p) { // x^y mod p ll ret=; while(y) { )ret = ret * x % p; x=x*x%p; y>>=; } return ret; } //图上dfs ]={}; ; ]; struct edge { int to; ; }bian[]; void add(int a,int b) { cnt++; bian[cnt].to=b; bian[cnt].nxt=head[a]; head[a]=cnt; } void dfs(int x) { printf("%d\n",x); vis[x]=; ;i=bian[i].nxt) { if(!vis[bian[i].to]) dfs(bian[i].to); } } dfs(); //最小环 #include<bits/stdc++.h> #define v (ti[x]) #define ll long long using namespace std; <<);; ]; ],DEP[]; inline void dfs(int x,int steps) { ) { printf("%d\n",ans); exit(); } ass++; DEP[x]=steps; vis[x]=; );//有环了 ); DEP[x]=; } int main() { scanf("%d",&n); ; i<=n; ++i) { scanf("%d",&ti[i]); } ; i<=n; ++i) { ); } printf("%d\n",ans); ; } //堆优化dij #include<cstdio> #include<queue> #include<cstring> #define inf (0x3f3f3f3f) struct node { int cur,x; bool operator<(const node& b) const { return this->x>b.x; } }; struct edge { int v,w,pre; } e[]; std::priority_queue<node> Q; ]; ],cnt; ]; void adde(int u,int v,int w) { e[++cnt]=(edge) {v,w,head[u]},head[u]=cnt; e[++cnt]=(edge) {u,w,head[v]},head[v]=cnt; } int dij(int s,int t) { memset(dis,0x3f,sizeof dis); dis[s]=; inQ[s]=; Q.push((node) {s,}); while(!Q.empty()) { node me=Q.top(); Q.pop(); inQ[me.cur]=; if(me.x==inf) continue; for(int i=head[me.cur]; i; i=e[i].pre) { int v=e[i].v; if(dis[v]>dis[me.cur]+e[i].w) { dis[v]=dis[me.cur]+e[i].w; if(!inQ[v]) { inQ[v]=; Q.push((node) { v,dis[v] }); } } } } :dis[t]; } int main() { int num,u,v,w,s,t; scanf("%d",&num); while(num--) { scanf("%d%d%d",&u,&v,&w); adde(u,v,w); } scanf("%d%d",&s,&t); printf("%d\n",dij(s,t)); ; }
noip考前模板大整理的更多相关文章
- noip考前模板复习
网络流 Dinic(搭配飞行员) //Serene #include<algorithm> #include<iostream> #include<cstring> ...
- Noip前的大抱佛脚----Noip真题复习
Noip前的大抱佛脚----Noip真题复习 Tags: Noip前的大抱佛脚 Noip2010 题目不难,但是三个半小时的话要写四道题还是需要码力,不过按照现在的实力应该不出意外可以AK的. 机器翻 ...
- Noip前的大抱佛脚----字符串
目录 字符串 经验 用FFT求解字符串匹配问题 两(多)串DP时状态合并 最长公共子序列转LIS 位运算最大值 挂链哈希 哈希处理回文串 树哈希 字符串模板库 KMP 最小循环表示 Mancher A ...
- Noip前的大抱佛脚----数论
目录 数论 知识点 Exgcd 逆元 gcd 欧拉函数\(\varphi(x)\) CRT&EXCRT BSGS&EXBSGS FFT/NTT/MTT/FWT 组合公式 斯特林数 卡塔 ...
- Noip前的大抱佛脚----图论
目录 图论 知识点 二分图相关 DFS找环 并查集维护二分图 二分图匹配的不可行边 最小生成树相关 最短路树 最短路相关 负环 多源最短路 差分约束系统 01最短路 k短路 网络流 zkw费用流 做题 ...
- Noip前的大抱佛脚----数据结构
目录 数据结构 知识点及其应用 线段树 神奇标记 标记不下放 并查集 维护二分图 维护后继位置 堆 可并堆的可持久化 dsu on tree 方式&原理 适用范围 单调队列 尺取合法区间 模板 ...
- ectouch第七讲 之ECshop模板机制整理
网上的资源感觉还是有些用,可以看看,帮助理解,ECshop模板机制整理原文:http://blog.sina.com.cn/s/blog_6900af430100nkn8.html 一.模板引擎: E ...
- Noip前的大抱佛脚----文章索引
Noip前的大抱佛脚----赛前任务 Noip前的大抱佛脚----考场配置 Noip前的大抱佛脚----数论 Noip前的大抱佛脚----图论 Noip前的大抱佛脚----动态规划 Noip前的大抱佛 ...
- Noip前的大抱佛脚----一些思路
目录 一些思路 序列 函数问题 网格图 删除和询问 乘法问题 顺序问题 最值问题 研究成果 数论分块套数论分块的复杂度 一些思路 Tags:Noip前的大抱佛脚 序列 线段树(当然还要有主席树啊!) ...
随机推荐
- 基于webuploader.js的单图片上传封装
HTML代码 <div class="manageImgUp">点击图片上传</div> <div class="manageImgUpLc ...
- MySQL show processlist说明
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- ps之雪碧图制作
图片拖入后 一般取同行同列最高最宽 自动在所选目录生成 打开: 修改 四次请求有点多啊. 打开 css sprite 自动生成坐标地址. 不过我们要把它排远一点 OK了. 我们生成以后: 坐标地址就可 ...
- MongoDB自动增长
MongoDB 没有像SQL一样有自动增长的功能,如果我们需要实现ObjectId自动增长功能,可以通过编程的方式来实现.步骤如下: 1. 创建counters集合: db.createCollect ...
- 基于Vue.js的大型报告页项目实现过程及问题总结(一)
今年5月份的时候做了一个测评报告项目,需要在网页正常显示的同时且可打印为pdf,当时的技术方案采用jquery+template的方式,因为是固定模板所以并没有考虑报告的模块化区分,九月底产品提出新的 ...
- RabbitMQ-Windows单机集群搭建
1.先安装Erlang http://www.erlang.org/downloads,安装完成后,设置环境变量: 变量名:ERLANG_HOME 变量值:D:\Program Files\erl9. ...
- Linux CentOS7 安装 Qt 5.9.2
Linux CentOS7 安装 Qt 5.9.2 参考链接 http://doc.qt.io/qt-5/linux.html sudo yum groupinstall "C Develo ...
- Windows环境下多线程编程原理与应用读书笔记(2)————面向对象技术
面向对象技术是学C++需要重点掌握的知识,因为我觉得自己的基础还是比较可以,这一章节的内容就只是粗略的读了一遍,在此就不做过多的笔记.
- 对es6中Promise和async的理解
Promise var promise = new Promise((resolve,reject)=>{ resolve(value); //reject(value) }); //promi ...
- AngularJS学习篇(一)
AngularJS 使用 表达式 把数据绑定到 HTML. AngularJS 表达式 AngularJS 表达式写在双大括号内:{{ expression }}. AngularJS 表达式把数据绑 ...