首页 > 其他分享 >一些模板

一些模板

时间:2024-05-13 23:09:42浏览次数:16  
标签:int sum range import print 一些 模板 dis

之前的模板在我考研时脑子一热删掉了QAQ,现在重新写了点,PythonC++都有。

dijkstra

\(O(n^2)\)

import os
import sys
import math
import copy
from collections import deque
from heapq import *

sys.setrecursionlimit(30000)

MAXN = 1 << 32

n, m, st = map(int, input().split())
mp = [[] for _ in range(n + 1)]
for i in range(m):
    u, v, w = map(int, input().split())
    mp[u].append([v, w])
##    mp[v].append([u, w])

dis, vis = [MAXN] * (n + 1), [0] * (n + 1)
dis[st] = 0
for i in range(n):
    t, minn = 0, MAXN
    for j in range(1, n + 1):
        if vis[j] == 0 and dis[j] < minn:
            t, minn = j, dis[j]
    vis[t] = 1
    for v, w in mp[t]:
        if vis[v] == 0 and dis[v] > dis[t] + w:
            dis[v] = dis[t] + w
    
for i in range(1, n + 1):
    if i < n:
        print(dis[i], end = " ")
    else:
        print(dis[i])

\(O(nlogm)\)

import os
import sys
import math
import copy
from collections import deque
from heapq import *

sys.setrecursionlimit(30000)

MAXN = 1 << 32

class edge():
    def __init__(self, v, w):
        self.v = v
        self.w = w
    def __lt__(self, t):
        if self.w < t.w:
            return True
        else:
            return False

n, m, st = map(int, input().split())
mp = [[] for _ in range(n + 1)]
for i in range(m):
    u, v, w = map(int, input().split())
    mp[u].append([v, w])
##    mp[v].append([u, w])
dis, vis = [MAXN] * (n + 1), [0] * (n + 1)
q = []
dis[st] = 0
heappush(q, edge(st, 0))

while len(q):
    t = heappop(q)
    u = t.v
    if vis[u]:
        continue
    vis[u] = 1
    for v, w in mp[u]:
        if dis[v] > dis[u] + w:
            dis[v] = dis[u] + w
            heappush(q, edge(v, dis[v]))

for i in range(1, n + 1):
    if i < n:
        print(dis[i], end = " ")
    else:
        print(dis[i])

dfs序和树状数组

import os
import sys
import math
import copy
from collections import deque
from heapq import *

sys.setrecursionlimit(30000)

n, m = map(int, input().split())
a = list(map(int, input().split()))
a.insert(0, 0)
mp = [[] for _ in range(n + 1)]
in1, out1, sum = [0] * (n + 1), [0] * (n + 1), [0] * (n + 1)
for i in range(n - 1):
    u, v = map(int, input().split())
    mp[u].append(v)
    mp[v].append(u)

cnt = 0
def dfs(u, fa):
    global cnt
    cnt += 1
    in1[u] = cnt
    for v in mp[u]:
        if v == fa:
            continue
        dfs(v, u)
    out1[u] = cnt

dfs(1, 0)

def lowbit(x):
    return x & (-x)

def upd(x, d):
    while x <= n:
        sum[x] ^= d
        x += lowbit(x)

def query(x):
    ans = 0
    while x:
        ans ^= sum[x]
        x -= lowbit(x)
    return ans

for i in range(1, n + 1):
    upd(in1[i], a[i])
while m:
    m -= 1
    ls = list(map(int, input().split()))
    if ls[0] == 1:
        x, y = ls[1], ls[2]
        upd(in1[x], a[x] ^ y)
        a[x] = y
    else:
        x = ls[1]
        print(query(out1[x]) ^ query(in1[x] - 1))

线段树

import os
import sys
import copy
from math import gcd

sys.setrecursionlimit(300000)
a = [0 for _ in range(100005)]
val = [0 for _ in range(100005 << 2)]

def push_up(root):
    val[root] = gcd(val[root << 1], val[root << 1 | 1])

def build(root, l, r):
    if l == r:
        val[root] = a[l]
        return
    mid = l + r >> 1
    build(root << 1, l, mid)
    build(root << 1 | 1, mid + 1, r)
    push_up(root)

def query(root, l, r, ql, qr):
    if qr < l or ql > r:
        return 0
    if ql <= l and r <= qr:
        return val[root]
    mid = l + r >> 1
    return gcd(query(root << 1, l, mid, ql, qr), query(root << 1 | 1, mid + 1, r, ql, qr))

def solve():
    n = int(input())
    v = list(map(int, input().split()))
    g = 0
    for i in range(n):
        g = gcd(g, v[i])
        a[i + 1] = v[i]
    if g > 1:
        print(-1)
        return
    if v.count(1):
        print(n - v.count(1))
        return
    build(1, 1, n)
    len, l = n, 1
    for i in range(1, n + 1):
        while query(1, 1, n, l, i) == 1:
            len = min(len, i - l + 1)
            l += 1
    print(len - 1 + n - 1)

T = 1
#T = int(input())
for _ in range(T):
    solve()

倍增求lca

import os
import sys
import math
import copy
import collections

sys.setrecursionlimit(30000)

n, m, rt = map(int, input().split())
mp = [[] for _ in range(n + 1)]
for i in range(n - 1):
    u, v = map(int, input().split())
    mp[u].append(v)
    mp[v].append(u)

lg, dep, fn = [0] * (n + 1), [0] * (n + 1), [[0 for _ in range(25)] for _ in range(n + 1)]
lg[0] = -1
for i in range(1, n + 1):
    lg[i] = lg[i // 2] + 1

def lca_init(u, fa):
    dep[u] = dep[fa] + 1
    fn[u][0] = fa
    for i in range(1, lg[dep[u]] + 1):
        fn[u][i] = fn[fn[u][i - 1]][i - 1]
    for v in mp[u]:
        if v == fa:
            continue
        lca_init(v, u)

def lca(x, y):
    if dep[x] < dep[y]:
        x, y = y, x
    while dep[x] > dep[y]:
        x = fn[x][lg[dep[x] - dep[y]]]
    if x == y:
        return x
    for i in range(lg[dep[x]], -1, -1):
        if fn[x][i] != fn[y][i]:
            x = fn[x][i]
            y = fn[y][i]
    return fn[x][0]

lca_init(rt, 0)
while m:
    m -= 1
    x, y = map(int, input().split())
    print(lca(x, y))

字符串hash

import os
import sys
import copy
mod = int(1e9 + 7)
base = 131
def solve():
    global mod
    global base
    s = list(input())
    n = len(s)
    s.insert(0, ' ')
    hl, hr, p, sum = [0 for _ in range(n + 1)], [0 for _ in range(n + 1)], [0 for _ in range(n + 1)], [0 for _ in range(n + 1)]
    p[0] = 1
    for i in range(1, n + 1):
        hl[i] = (hl[i - 1] * base % mod + int(s[i])) % mod
        hr[i] = (hr[i - 1] * base % mod + int(s[n - i + 1])) % mod
        p[i] = p[i - 1] * base % mod
        sum[i] = sum[i - 1] + int(s[i])
    def hash(h, l, r):
        return (h[r] - h[l - 1] * p[r - l + 1] % mod + mod) % mod
    ans = sum[n]
    for i in range(1, n + 1):
        if s[i] == '0':
            l, r, maxn = 0, min(i - 1, n - i), 0
            while l <= r:
                mid = (l + r) >> 1
                if hash(hl, i - mid, i) == hash(hr, n - i - mid + 1, n - i + 1):
                    l = mid + 1
                    maxn = mid
                else:
                    r = mid - 1
            ans = min(ans, sum[n] - (sum[i + maxn] - sum[i - maxn - 1]) // 2)
            #print(maxn)
    for i in range(1, n):
        l, r, maxn = 0, min(i, n - i), 0
        while l <= r:
            mid = (l + r) >> 1
            if hash(hl, i - mid + 1, i) == hash(hr, n - i - mid + 1, n - i):
                l = mid + 1
                maxn = mid
            else:
                r = mid - 1
        #print(maxn)
        ans = min(ans, sum[n] - (sum[i + maxn] - sum[i - maxn]) // 2)
    print(ans)
T = 1
#T = int(input())
for _ in range(T):
    solve()

Exgcd

\(O(logn)\)

int Exgcd(int a, int b, int &x, int &y) {
    if (!b) {
        x = 1;
        y = 0;
        return a;
    }
    int d = Exgcd(b, a % b, x, y);
    int t = x;
    x = y;
    y = t - (a / b) * y;
    return d;
}

标签:int,sum,range,import,print,一些,模板,dis
From: https://www.cnblogs.com/fhyu/p/18190247

相关文章

  • 低开开发笔记(六): 工作台与模板样式开发
    好家伙,仅仅只是实现了样式,完整功能暂未完成 完整代码已开源https://github.com/Fattiger4399/ph-questionnaire.git  1.灵感来源(抄袭对象)刚开始想着随便写个低开项目练练手的,然后就写成这样了1.1.简道云 1.2.问卷星  2.上代码<template><divc......
  • 创建启动springboot项目的一些问题,如spring-boot-autoconfigure 自动加载注入配置
    1.springboot项目启动是否只需要3下面3个jar包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.b......
  • 【VMware vSphere】如何查看 OVF/OVA 模板部署虚拟机所配置的密码。
    当我们从OVF/OVA模板部署虚拟机时,在部署期间可能会要求你对虚拟机进行一些配置,比如IP地址、虚拟机密码等。关于这些配置参数,登录vSphereClient,可以转到该虚拟机-配置-设置-vApp选项-属性中进行参看。当我们部署完这个虚拟机后,如果长时间没有登录,忘记配置期间设置的密码,那该怎......
  • ABAQUS 中的一些约定
    目录自由度notationAxisymmetricelementsActivationofdegreesoffreedomInternalvariablesinAbaqus/StandardCoordinatesystemsSymbolsusedinAbaqusforunitsTimemeasuresConventionusedforstressandstraincomponentsNonisotropicmaterialbehaviorZero-value......
  • Transformers 加速的一些常用技巧
    Transformers是一个强大的架构,但模型因其采用的自注意力机制,虽然能够有效地处理序列数据并捕获长距离依赖关系,但同时也容易导致在训练过程中出现OOM(OutofMemory,内存不足)或者达到GPU的运行时限制。主要是因为参数数量庞大:Transformer模型通常包含大量的参数,尤其是在模型层面......
  • 还有许多其他常见的Windows问题,可以记录在「Windows 捉虫日记」中。以下是一些其他可
     「Windows捉虫日记」是一个非常有趣的主题,它可以记录你在Windows系统中发现和解决各种问题的过程,类似于软件开发中的「程序员日记」或者「DebuggingDiary」。以下是一份可能的Windows捉虫日记的样本:日期:2050年5月20日问题描述:开机后,Windows系统启动速度异常缓慢,且任......
  • .net 开发中遇到的一些问题
    .Net开发中遇到的一些坑1、Asp.netCore项目打包成docker镜像时,出现***xx.csproj未找到错误大概率是因为当前执行的目录不在sln目录,切换到sln目录就可以了2、编译Docker镜像时,出现Determiningprojectstorestore...errorNU1301:Unabletoloadtheserviceind......
  • 对我国新老房屋建筑抗震性的一些思考 —— 2008年5月12日14时28分四川汶川发生8.0级地
    相关:https://baijiahao.baidu.com/s?id=1798811689519570294对我国新老房屋建筑抗震性的一些思考有些事情虽然过去很久了,但是我们依然不能遗忘。抗震,是我们这个时代要面临的问题,在以前经济条件不好的年代,人们对于抗震这个事情并没有太多的要求,但是慢慢随着经济的好转,人们对更......
  • EPAI手绘建模APP工程图模板、投影、剖切、局部放大、中间线、符号、填充
    (4) 工程图① 模板1) 模板包括可以选择修改的模板字段和不可选择修改的固定元素。2) 选择模板字段长按,打开模板字段编辑器,填写模板字段内容,点击工程图空白地方,更新模板字段。图 314 工程图元素编辑器-模板字段② 工程图元素1) 投影a. 选择投影,长按,打开投影元素编......
  • Spring6 的JdbcTemplate的JDBC模板类的详细使用说明
    1.Spring6的JdbcTemplate的JDBC模板类的详细使用说明@目录1.Spring6的JdbcTemplate的JDBC模板类的详细使用说明每博一文案2.环境准备3.数据准备4.开始4.1从数据表中插入(添加)数据4.2从数据表中修改数据4.3从数据表中删除数据4.4从数据表中查询一个对象4.5从数据表中......