建图【模板】

PART1

1.实现:

a.如果一个代码每次使用都有提前的步骤,就把他们写成一个UseFunction函数

b.常用的东西就应该写成define(包括类型,因为如此万一要更改就很方便),写成define的有

  1)写起来觉得麻烦的

  2)用的次数很多的(1怕写错,2方便修改)

2.时间复杂度:

3.特别优势:

4.适用情况:

5.需要注意的点:

#define时候能打括号的式子要打括号,否则容易出事

要注意是无向图还是有向图

注意有无边权

 不同情况公有的代码最好都写写,最后再合并整合

写代码逻辑关系是真的特别容易错.....

结构体名字用全大写,除了node

不常见的临时变量前面全部要加tmp

变量在写模板的时候能写在里面就写在函数里面,倒是可能因此出错,但是方便看和不用每次都来init罢了

要妥善处理好每个模板init的问题

所有的int的东西都要long long来一份

PART2

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<cstring>
#include<string>
#include<vector>
#include<queue>
#include<iomanip>
#include<iostream>
#include<stack>
using namespace std;
const int maxN_ = 1e2+10;
const int maxM_ = 1e4+10;
///---------------常用规定部分
#define valueType_ int//valueType(1~1e19)
#define inf_ 0x3f3f3f3f//这是给int的inf,值为1061109567,2^31-1为2147483647
#define reg_ register int
#define for_(i, n) for(int i = 1; i <= n; i++)
#define forReg_(i, n) for(reg_ i = 1; i <= n; i++)
#define ll_ long long
#define ull_ unsigned long long
///---------------通用函数
inline valueType_ Read()
{
    valueType_ x=0;
    char c=getchar();
    while(c<'0'||c>'9')
        c=getchar();
    while(c>='0'&&c<='9')
    {
        x=(x<<1)+(x<<3)+c-'0';
        c=getchar();
    }
    return x;
}
///---------------建图
#define visitEdge_ int i = p[u]; ~i; i = e[i].next
#define defineV_ int v = e[i].v
#define defineVAvoidFa_ int v = e[i].v;if(v == fa) continue
struct edge
{
    int u, v, next;
    valueType_ w;
} e[maxN_];
int p[maxN_], eid;
inline void InitEdge()
{
    memset(p, -1, sizeof(p));
    eid = 0;
}
inline void Insert(int u, int v, valueType_ w = 0)
{
    e[eid].next = p[u];
    e[eid].u = u;
    e[eid].v = v;
    e[eid].w = w;
    p[u] = eid++;
}
///--------------
int main()
{
    //freopen("in.txt","r", stdin);
    //freopen("out.txt","w", stdout);
    ios::sync_with_stdio(false);
    //InitEdge();
    return 0;
}
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<cstring>
#include<string>
#include<vector>
#include<queue>
#include<iomanip>
#include<iostream>
#include<stack>
using namespace std;
/**这种双**的是给写文格式的说明,和代码内容无关**/
///---------------------------------------------------这样的线是分割线
///----------------------------------------------------常用规定部分:都采用 小写字母 加 _ 的方式
//----------------------通用
#define inf_ 0x3f3f3f3f//这是给int的inf,值为1061109567,2^31-1为2147483647
#define reg_ register int
#define for_reg(i, n) for(reg_ i = 1; i <= n; i++)
#define ll_ long long
#define ull_ unsigned long long
//----------------------边访问
#define visit_edge int i = p[u]; ~i; i = e[i].next
#define define_v int v = e[i].v
#define define_v_avoid_f int v = e[i].v;if(v == fa) continue
//----------------------线段树
#define mid_ int mid = (l+r)>>1//mid的定义
#define len_ (r-l+1)/**像这样的式子千万要打括号,要不然就完了**/
#define l_id id<<1
#define r_id id<<1|1
#define l_son id<<1,l,mid
#define r_son id<<1|1,mid+1,r
#define include_(x,y,l,r) x<=l && r<=y
//----------------------其它
const int max_n = 1e2+10;
const int max_m = 1e4+10;
///-------------------------------------------------------变量声明部分:全局变量除第一个单词外其它单词首字母大写+结尾加一个g(global variable)
//-------------------------------------与边相关
struct edge
{
    int u, v, next, w;
} e[max_m];
int p[max_n], eid;
//--------------------------------------其它
///--------------------------------------------------------函数声明部分:函数的单词首字母大写,常用局部变量简化
inline int Read();
//--------------------------------------与边相关
inline void InitEdge();
inline void Insert(int u, int v, int w = 0);
//--------------------------------------其它

///--------------------------------------------------------main函数部分
int main()
{
    //freopen("in.txt","r", stdin);
    //freopen("out.txt","w", stdout);
    ios::sync_with_stdio(false);
    InitEdge();
    return 0;
}
///--------------------------------------------------------函数定义部分
/**
按照这个来給函数定义注释
//功能:
//参数:
//返回值:
**/
inline int Read()
{
    int x=0;
    char c=getchar();
    while(c<'0'||c>'9')
        c=getchar();
    while(c>='0'&&c<='9')
    {
        x=(x<<1)+(x<<3)+c-'0';
        c=getchar();
    }
    return x;
}
///-----------------------------------建图
inline void InitEdge()
{
    memset(p, -1, sizeof(p));
    eid = 0;
}
inline void Insert(int u, int v, int w)
{
    e[eid].next = p[u];
    e[eid].u = u;
    e[eid].v = v;
    e[eid].w = w;
    p[u] = eid++;
}
///----------------------------------其它
用作格式模板

PART3

PART4

PART5

原文地址:https://www.cnblogs.com/bear-xin/p/14953038.html