ural1471 Distance in the Tree

本文介绍了一种求解加权树中两个节点之间距离的算法,并提供了完整的C++实现代码。采用Tarjan算法进行计算,适用于处理大量查询的情况。

Distance in the Tree

Time limit: 1.0 second
Memory limit: 64 MB
A weighted tree is given. You must find the distance between two given nodes.

Input

The first line contains the number of nodes of the tree n (1 ≤ n ≤ 50000). The nodes are numbered from 0 to n – 1. Each of the next n – 1 lines contains three integers uvw, which correspond to an edge with weight w (0 ≤ w ≤ 1000) connecting nodes u and v. The next line contains the number of queries m (1 ≤ m ≤ 75000). In each of the next m lines there are two integers.

Output

For each query, output the distance between the nodes with the given numbers.

Sample

inputoutput
3
1 0 1
2 0 1
3
0 1
0 2
1 2
1
1
2

 

分析:树上两点间距离,直接tarjan;

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <climits>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <vector>
#include <list>
#define rep(i,m,n) for(i=m;i<=n;i++)
#define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define ll long long
#define pi acos(-1.0)
#define pii pair<int,int>
#define Lson L, mid, rt<<1
#define Rson mid+1, R, rt<<1|1
const int maxn=1e5+10;
const int dis[4][2]={{0,1},{-1,0},{0,-1},{1,0}};
using namespace std;
ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}
ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p;p=p*p;q>>=1;}return f;}
int n,m,k,t,p[maxn],ans[maxn],vis[maxn],q[maxn];
int find(int x)
{
    return p[x]==x?x:p[x]=find(p[x]);
}
vi query[maxn],a[maxn],len[maxn],id[maxn];
void dfs(int now,int pre,int gao)
{
    if(pre!=-1)q[now]=q[pre]+gao;
    for(int i=0;i<a[now].size();i++)
    {
        if(a[now][i]!=pre)
        {
            dfs(a[now][i],now,len[now][i]);
        }
    }
}
void dfs1(int now)
{
    vis[now]=1;
    for(int i=0;i<query[now].size();i++)
    {
        if(vis[query[now][i]])
        {
            int fa=find(query[now][i]);
            ans[id[now][i]]=q[now]+q[query[now][i]]-2*q[fa];
        }
    }
    for(int x:a[now])
    {
        if(!vis[x])
        {
            dfs1(x);
            p[x]=now;
        }
    }
}
int main()
{
    int i,j;
    scanf("%d",&n);
    rep(i,1,n)p[i]=i;
    rep(i,1,n-1)
    {
        int u,v,w;
        scanf("%d%d%d",&u,&v,&w);
        a[u].pb(v),a[v].pb(u);
        len[u].pb(w),len[v].pb(w);
    }
    scanf("%d",&t);
    rep(i,1,t)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        query[a].pb(b),query[b].pb(a);
        id[a].pb(i),id[b].pb(i);
    }
    dfs(1,-1,-1);
    dfs1(1);
    rep(i,1,t)printf("%d\n",ans[i]);
    //system("Pause");
    return 0;
}

 

转载于:https://www.cnblogs.com/dyzll/p/5787081.html

标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之一,其结果对机构的信贷政策和风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 一、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用表现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理和建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是一种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而表示违约的可能性。 四、支持向量机模型 支持向量机是一种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与转换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据集划分为训练集和测试集,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、集成学习方法 为提升模型预测能力,可采用集成策略,如结合多个模型的预测结果。这有助于降低单一模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
### URAL Networks介绍 URAL Networks代表一种专注于处理复杂结构化数据的神经网络架构,尤其适用于图形和其他非欧几里得域的数据。这类网络旨在解决传统深度学习方法难以应对的问题,在这些领域中,输入数据通常不是简单的向量或网格状排列的像素。 #### 图形上的卷积操作 对于图形上定义的任务,研究主要集中在如何有效地将卷积运算推广到这种不规则结构之上[^1]。具体来说: - **消息传递神经网络 (MPNN)** 是一类重要的模型,能够很好地捕捉节点间的关系并应用于多个科学计算场景,比如量子化学等领域。 - **非局部神经网络 (NLNN)** 则引入了自注意力机制来增强特征表达能力,尽管其具体的实现细节可能不如某些其他变体那样清晰界定。 - **图形网络 (GN) 框架** 不仅为现有GNNs提供了一个强有力的理论基础,同时也强调了通过适当的设计可以促进更广泛的泛化性能——这对于构建具备更强推理能力和鲁棒性的AI系统至关重要。 ```python import torch from torch_geometric.nn import MessagePassing, global_mean_pool class SimpleGraphConv(MessagePassing): def __init__(self, in_channels, out_channels): super(SimpleGraphConv, self).__init__() self.lin = torch.nn.Linear(in_channels, out_channels) def forward(self, x, edge_index): return self.propagate(edge_index, size=(x.size(0), x.size(0)), x=self.lin(x)) # Example usage of a simple graph convolution layer within an MPNN framework. ``` 上述代码片段展示了一个简化版的消息传递层实现方式,这是构成许多先进图神经网络的核心组件之一。 #### 应用实例 在实际应用方面,URAL Networks已经被成功部署到了诸如社交网络分析、推荐系统优化以及生物信息学等多个重要行业当中。特别是在涉及大规模异构交互模式识别的情况下表现出色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值