zoukankan      html  css  js  c++  java
  • 建图【模板】

    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

  • 相关阅读:
    各种排序算法的时间复杂度和空间复杂度
    fork/join框架
    全文检索之solr学习
    【设计模式最终总结】概述、分类、原则
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(75)-微信公众平台开发-用户管理
    下拉列表自己封装的
    下拉列表
    一个原生的JavaScript拖动方法
    JavaScript的jsonp
    angular2 的依赖注入
  • 原文地址:https://www.cnblogs.com/bear-xin/p/14953038.html
Copyright © 2011-2022 走看看