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前的大抱佛脚 序列 线段树(当然还要有主席树啊!) ...
随机推荐
- 【面向对象】详解之JavaScript篇
[重点提前说:面向对象的思想很重要!] 最近开始接触学习后台的PHP语言,在接触到PHP中的面向对象相关思想之后,突然想到之前曾接触的JS中的面向对象思想,无奈记性太差,便去翻了翻资料,花了点时间梳理 ...
- LeetCode 189. Rotate Array (旋转数组)
Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array ...
- 一个简单的makefile文件编写
下午闲来无聊,就打开很久没动过的linux系统想熟悉熟悉在linux上面编译代码,结果一个makefile文件搞到晚上才搞定,哈哈! 先把代码简单贴上来,就写了一个冒泡排序: sort.h: #ifn ...
- SQL数据查询语句(一)
本文所用数据库为db_Test,数据表为Employee 一.SELECT语句基本结构 语句语法简单归纳为: SELECT select_list [INTO new_table_name] [FRO ...
- JDBC(三)数据库连接池(DBCP、C3P0)
前言 这段时间状态有一点浮躁,希望自己静下心来.还有特别多的东西还没有学懂.需要学习的东西非常的多,加油! 一.JDBC复习 Java Data Base Connectivity,java数据库连接 ...
- TreeView简单的动态加载数据
简单的小记录,省得去看控件属性详情了,基本常用的属于就几个 先是判断根节点是否存在控件中,如果不存在则创建,之前要添加了节点同样的方法 把根节点传到子节点的方法中,再判断是否在根节点里存在子节点,如果 ...
- JS模块化-requireJS
1. 为什么要使用require.js 刚开始的时候,网页需要用到很多不同的插件,都是依次加载,需要注意其中的加载顺序即依赖关系. <script src="1.js"> ...
- this指向(匿名函数问题)
1.匿名函数中 this一般指向window对象 2.闭包函数中的this,指向window var mod = { init: function(){ console.log('this',this ...
- Problem B: 开个餐馆算算账
Description 小明创业了!他开了一家餐馆,每天客人还挺多的.每天下班后,他都要算算今天总共收入多少钱,但是手工算太麻烦了,所以他来向你求助了. Input 第1行N>0,表示餐馆提供N ...
- php缓存模块apc可能导致php-fpm终止
如果你的网站出现502错误.同时你网站中又使用了apc模块来做缓存处理.那么这篇文章兴许能帮到你. 首先,查看了php-fpm 的进程数. 发现php-fpm的进程数已经到达了php-fpm.conf ...