洛谷试炼场 普及常见模板

对没错我就是在水博

P3366 【模板】最小生成树

  kruskal:

 

P3367 【模板】并查集

  

 1 /*by SilverN*/
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 using namespace std;
 8 const int mxn=210000;
 9 int read(){
10     int x=0,f=1;char ch=getchar();
11     while(ch<‘0‘ || ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
12     while(ch>=‘0‘ && ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
13     return x*f;
14 }
15 int n,m;
16 int fa[mxn];
17 void init(){
18     for(int i=1;i<=n;i++){
19         fa[i]=i;
20     }
21 }
22 int find(int x){
23     if(fa[x]==x)return x;
24     return fa[x]=find(fa[x]);
25 }
26 int main(){
27     n=read();m=read();
28     init();
29     int x,y,z;
30     while(m--){
31         z=read();x=read();y=read();
32         x=find(x);
33         y=find(y);
34         if(z==1){
35             fa[x]=y;
36         }
37         else{
38             if(x==y){
39                 printf("Y\n");
40             }
41             else printf("N\n");
42         }
43     }
44     return 0;
45 }

P3371 【模板】单源最短路径

水这个模板题的时候,邻接表数组开小了,WA了五六次,悲伤。

 1 /*by SilverN*/
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 using namespace std;
 8 const int mxx=2147483647;
 9 const int mxn=540000;
10 int read(){
11     int x=0,f=1;char ch=getchar();
12     while(ch<‘0‘ || ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
13     while(ch>=‘0‘ && ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
14     return x*f;
15 }
16 struct edge{
17     int v,dis;
18     int nxt;
19 }e[mxn];
20 int hd[mxn],mct=0;
21 void add_edge(int u,int v,int dis){
22     e[++mct].v=v;e[mct].dis=dis;e[mct].nxt=hd[u];hd[u]=mct;
23     return;
24 }
25 int n,m,s;
26 int dis[mxn];
27 bool inq[mxn];
28 int q[360010];
29 int vis[mxn];
30 int head=0,tl=1;
31 void spfa(){
32     for(int i=1;i<=n;i++){dis[i]=mxx;}
33     dis[s]=0;
34     q[++head]=s;
35     while(head!=tl+1){
36         int u=q[head];head=(head+1)%360000;inq[u]=0;
37         for(int i=hd[u];i;i=e[i].nxt){
38             int v=e[i].v;
39             if((long long)dis[u]+(long long)e[i].dis<(long long)dis[v]){
40                 dis[v]=dis[u]+e[i].dis;
41                 vis[v]++;
42                 if(vis[v]>n)return;
43                 if(!inq[v]){
44                     inq[v]=1;
45                     tl=(tl+1)%360000;
46                     q[tl]=v;
47                 }
48             }
49         }
50     }
51     return;
52 }
53 int main(){
54     n=read();m=read();s=read();
55     int i,j;
56     int u,v,d;
57     for(i=1;i<=m;i++){
58         u=read();
59         v=read();
60         d=read();
61         add_edge(u,v,d);
62     }
63     spfa();
64     for(i=1;i<=n;i++){
65         printf("%d ",dis[i]);
66     }
67     printf("\n");
68     return 0;
69 }

P3383 【模板】线性筛素数

 1 /*by SilverN*/
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstring>
 5 #include<cstdio>
 6 #include<cmath>
 7 using namespace std;
 8 int read(){
 9     int x=0,f=1;char ch=getchar();
10     while(ch<‘0‘ || ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
11     while(ch>=‘0‘ && ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
12     return x*f;
13 }
14 const int mxn=10000005;
15 int pri[mxn>>1],cnt;
16 bool vis[mxn];
17 void PRI(int mxn){
18     vis[1]=1;
19     int i,j;
20     for(i=2;i<mxn;i++){
21         if(!vis[i])pri[++cnt]=i;
22         for(j=1;j<=cnt && i*pri[j]<mxn;j++){
23             vis[i*pri[j]]=1;
24             if(i%pri[j]==0)break;
25         }
26     }
27     return;
28 }
29 int n,m;
30 int main(){
31     n=read();m=read();
32     PRI(n+3);
33     int x;
34     while(m--){
35         x=read();
36         if(vis[x])printf("No\n");
37         else printf("Yes\n");
38     }
39     return 0;
40 }

时间: 2024-10-05 04:03:13

洛谷试炼场 普及常见模板的相关文章

洛谷试炼场 提高模板-nlogn数据结构

树状数组-区间求和 P3374 [模板]树状数组 1 1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 using namespace std; 8 int read(){ 9 int x=0,f=1;char ch=getchar(); 10 while(ch

【洛谷P3379】【模板】最近公共祖先(LCA)

题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每行包含两个正整数x.y,表示x结点和y结点之间有一条直接连接的边(数据保证可以构成树). 接下来M行每行包含两个正整数a.b,表示询问a结点和b结点的最近公共祖先. 输出格式: 输出包含M行,每行包含一个正整数,依次为每一个询问的结果. 输入输出样例 输入样例#1: 5 5 4 3 1 2 4 5

洛谷P3381——费用流模板题

嗯..随便刷了一道费用流的模板题....来练练手. #include<iostream> #include<cstdio> #include<cstring> using namespace std; int h[5210],d[5210],used[5210],que[100010],last[5210]; int k=1,INF=0x7fffffff,ans1=0,ans2=0; inline int read(){ int t=1,num=0; char c=ge

【原创】洛谷 LUOGU P3373 【模板】线段树2

P3373 [模板]线段树 2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含三个整数N.M.P,分别表示该数列数字的个数.操作的总个数和模数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数乘上k 操作2: 格式:2 x

[模板]洛谷T3373 线段树 模板2

此题相对于模板一,加了个区间乘,于是在模板一的基础上需要多开个数组(记录乘法懒标记).多写个函数(区间乘),还有要把懒标记下放函数做些修改. 变量定义: sum[]:线段树节点对应区间的元素总和: addv[]:线段树节点对应区间的所有元素待加的值(懒标记),初值全部设为0: mulv[]:线段树节点对应区间的所有元素待乘的值(懒标记),初值全部设为1. 过程说明: 建树(Build): 同模板一... 懒标记下放(Push_down): 原理解释: 1.当对某区间执行加法操作时,由于加法优先级

【原创】洛谷 LUOGU P3379 【模板】最近公共祖先(LCA) -&gt; 倍增

P3379 [模板]最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每行包含两个正整数x.y,表示x结点和y结点之间有一条直接连接的边(数据保证可以构成树). 接下来M行每行包含两个正整数a.b,表示询问a结点和b结点的最近公共祖先. 输出格式: 输出包含M行,每行包含一个正整数,依次为每一个询问的结果. 输入输出样例 输入

【原创】洛谷 LUOGU P3366 【模板】最小生成树

P3366 [模板]最小生成树 题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出orz 输入输出格式 输入格式: 第一行包含两个整数N.M,表示该图共有N个结点和M条无向边.(N<=5000,M<=200000) 接下来M行每行包含三个整数Xi.Yi.Zi,表示有一条长度为Zi的无向边连接结点Xi.Yi 输出格式: 输出包含一个数,即最小生成树的各边的长度之和:如果该图不连通则输出orz 输入输出样例 输入样例#1: 4 5 1 2 2 1 3 2 1 4 3 2 3 4

【洛谷P3389】【模板】高斯消元

题目链接 题目描述 给定一个线性方程组,对其求解 输入输出格式 输入格式: 第一行,一个正整数 n 第二至 n+1行,每行 n+1 个整数,为a1, a2 .....an? 和 b,代表一组方程. 输出格式: 共n行,每行一个数,第 i行为 xi? (保留2位小数) 如果不存在唯一解,在第一行输出"No Solution". 输入输出样例 输入样例#1: 3 1 3 4 5 1 4 7 3 9 3 2 2 输出样例#1: -0.97 5.18 -2.39 说明 1≤n≤100,∣ai?

洛谷 P3376 【【模板】网络最大流】

题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行包含三个正整数ui.vi.wi,表示第i条有向边从ui出发,到达vi,边权为wi(即该边最大流量为wi) 输出 一行,包含一个正整数,即为该网络的最大流. 样例输入 4 5 4 3 4 2 30 4 3 20 2 3 20 2 1 30 1 3 40 样例输出 50 数据规模: 对于30%的数据:N<=10,M<=2