首页 > 其他分享 >[模板]点分治

[模板]点分治

时间:2022-10-11 17:55:53浏览次数:79  
标签:ch int 分治 maxn rem judge inf 模板

洛谷p3806

code
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const int maxn = 1e5 + 7;
const int inf = 1e7;

int n, m, maxp[maxn], siz[maxn], dis[maxn], rem[maxn], qu[1010];
int sum, rt, ans, q[maxn];
bool vis[maxn], test[inf], judge[inf];

inline int read()
{
    int x = 0, f = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9')
    {
        if(ch == '-')
        {
            f = -1;
        }
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
    {
        x = (x << 1) + (x << 3) + (ch^48);
        ch = getchar();
    }
    return x * f;
}

struct node 
{
    int next, to, w;
}a[maxn<<1];
int head[maxn], len;

void add(int x, int y, int w)
{
    a[++len].to = y; a[len].next = head[x]; a[len].w = w;
    head[x] = len;
}

void getrt(int u, int fa)
{
    siz[u] = 1; maxp[u] = 0;
    for(int i=head[u]; i; i=a[i].next)
    {
        int v = a[i].to;
        if(v == fa || vis[v]) continue;
        getrt(v, u);
        siz[u] += siz[v];
        maxp[u] = max(maxp[u], siz[v]);
    }
    maxp[u] = max(maxp[u], sum-siz[u]);
    if(maxp[u] < maxp[rt]) rt = u;
}

void getdis(int u, int fa)
{
    rem[++rem[0]] = dis[u];
    for(int i=head[u]; i; i=a[i].next)
    {
        int v = a[i].to;
        if(v == fa || vis[v]) continue;
        dis[v] = dis[u] + a[i].w;
        getdis(v, u);
    }
}

void calc(int u)
{
    int p = 0;
    for(int i=head[u]; i; i=a[i].next)
    {
        int v = a[i].to;
        if(vis[v]) continue;
        rem[0] = 0; dis[v] = a[i].w;
        getdis(v, u);
        for(int j=rem[0]; j; j--)
        {
            for(int k=1; k<=m; k++)
            {
                if(qu[k] >= rem[j])
                {
                    test[k] |= judge[qu[k]-rem[j]];
                }
            }
        }
        for(int j=rem[0]; j; j--)
        {
            q[++p] = rem[j]; judge[rem[j]] = 1;
        }
    }
    for(int i=1; i<=p; i++) judge[q[i]] = 0;
}

void solve(int u)
{
    vis[u] = judge[0] = 1; calc(u);
    for(int i=head[u]; i; i=a[i].next)
    {
        int v = a[i].to;
        if(vis[v]) continue;
        sum = siz[v]; maxp[rt=0] = inf;
        getrt(v, 0); solve(rt);
    }
}

int main()
{
    n = read(); m = read();
    for(int i=1; i<n; i++)
    {
        int x = read(), y = read(), w = read();
        add(x, y, w); add(y, x, w);
    }
    for(int i=1; i<=m; i++)
    {
        qu[i] = read();
    }
    maxp[rt] = sum = n;
    getrt(1, 0);
    solve(rt);
    for(int i=1; i<=m; i++)
    {
        if(test[i]) printf("AYE\n");
        else printf("NAY\n");
    }
    
    return 0;
}

 

标签:ch,int,分治,maxn,rem,judge,inf,模板
From: https://www.cnblogs.com/Catherine2006/p/16780053.html

相关文章

  • jpa整合mybatis模板解析、hibernate整合mybatis模板解析
    jpa整合mybatis模板解析、hibernate整合mybatis模板解析jpa是hibernate的封装,主要用于spring全家桶套餐。hibernate难以编写复杂的SQL。例如一个订单查询,查询条件有时间......
  • 【程序员必会十大算法】之分治算法(汉诺塔问题)
    1.应用分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题…直到最后子问题可以简......
  • 09-Go设计模式-模板方法模式
    模板方法模式示例代码/*模板方法模式模板方法模式中的角色和职责AbstractClass(抽象类):在抽象类中定义了一系列基本操作(PrimitiveOperations),这些基本操作可以是具体......
  • P6560 [SBCOI2020] 时光的流逝(DAG图上博弈模板)
    P6560[SBCOI2020]时光的流逝(DAG图上博弈模板)题意:​ 给出一个有向图(可能有环),每轮游戏有一个起点和终点,A和B一起玩游戏。A先移动,然后他们交替移动,当谁把棋子移动至终点,谁......
  • Vue3的模板语法
    1.插值语法1.1基本使用点击查看代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge">......
  • kubernetes(k8s)常用deploy模板 并验证
    kubernetes常用deploy模板,并验证编写deploy配置文件root@hello:~#catdeploy.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:hostname-test-cbylabels......
  • 算法基础(五)| 差分算法及模板详解
    ⭐写在前面的话:本系列文章旨在复习算法刷题中常用的基础算法与数据结构,配以详细的图例解释,总结相应的代码模板,同时结合例题以达到最佳的学习效果。本专栏面向算法零基础但有......
  • C++之可变模板参数打印及Pari的逐块式构造(Piecewise Construction)
    classFoo{public:Foo(tuple<int,double>){cout<<"Foo(tuple<int,double>)"<<endl;}template<typenameT>voidprint(Tt)......
  • 洛谷 P8572【暴力】【根号分治】
    根号分治。需要进行分类讨论:当\(n\lek\)的时候,可以进行暴力\(\#1\):暴力求出数组所有区间的最大值。(需要使用前缀和)否则,可以使用一个叫做“记忆化”的鬼玩意。如......
  • 模板templates的使用
    目录​​模板及其渲染​​​​模板查找路径​​​​DTL模板语法​​​​常用的模板标签​​​​DTL常用过滤器​​​​模块结构优化​​​​加载静态文件​​模板及其渲染视......