AcWing 477:神经网络 ← 拓扑排序+链式前向星

news2024/10/7 8:24:05

【题目来源】
https://www.acwing.com/problem/content/479/

【题目描述】
人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。
对神经网络的研究一直是当今的热门方向,兰兰同学在自学了一本神经网络的入门书籍后,提出了一个简化模型,他希望你能帮助他用程序检验这个神经网络模型的实用性。
在兰兰的模型中,神经网络就是一张有向图,图中的节点称为神经元,而且两个神经元之间至多有一条边相连,下图是一个神经元的例子:

图中,X1—X3是信息输入渠道,Y1-Y2 是信息输出渠道,C1 表示神经元目前的状态,Ui 是阈值,可视为神经元的一个内在参数。 
神经元按一定的顺序排列,构成整个神经网络。
在兰兰的模型之中,神经网络中的神经元分为几层;称为输入层、输出层,和若干个中间层。
每层神经元只向下一层的神经元输出信息,只从上一层神经元接受信息。
下图是一个简单的三层神经网络的例子。

兰兰规定,Ci 服从公式:C_i=\sum W_{ji}C_j-U_i,(其中 n 是网络中所有神经元的数目)
公式中的Wji(可能为负值)表示连接 j 号神经元和 i 号神经元的边的权值。
当 Ci 大于 0 时,该神经元处于兴奋状态,否则就处于平静状态。
当神经元处于兴奋状态时,下一秒它会向其他神经元传送信号,信号的强度为 Ci。
如此.在输入层神经元被激发之后,整个网络系统就在信息传输的推动下进行运作。
现在,给定一个神经网络,及当前输入层神经元的状态(Ci),要求你的程序运算出最后网络输出层的状态。

【输入格式】
输入文件第一行是两个整数 n 和 p。
接下来 n 行,每行两个整数,第 i+1 行是神经元 i 最初状态和其阈值(Ui)。注意:输入层给定的状态即为最终值,不需要再减去 Ui,非输入层的神经元开始时状态必然为 0。
再下面 P 行,每行有两个整数 i,j 及一个整数 Wij,表示连接神经元 i、j 的边权值为 Wij。

【输出格式】
输出文件包含若干行,每行有两个整数,分别对应一个神经元的编号,及其最后的状态,两个整数间以空格分隔。
仅输出最后状态大于零的输出层神经元状态,并且按照编号由小到大顺序输出。
若输出层的神经元最后状态都不大于零,则输出 NULL。

【数据范围】
1≤n≤100

【输入样例】
5 6
1 0
1 0
0 1
0 1
0 1
1 3 1
1 4 1
1 5 1
2 3 1
2 4 1
2 5 1

【输出样例】
3 1
4 1
5 1

【算法分析】
● 拓扑序列:https://blog.csdn.net/hnjzsyjyj/article/details/129811447

● 链式前向星:https://blog.csdn.net/hnjzsyjyj/article/details/139369904
val[idx]:存储编号为 idx 的边的值
e[idx]:存储编号为 idx 的结点的值
ne[idx]:存储编号为 idx 的结点指向的结点的编号
h[a]:存储头结点 a 指向的结点的编号

【算法代码】

#include <bits/stdc++.h>
using namespace std;

const int maxn=105;
const int maxm=maxn*maxn/2;
int val[maxm],e[maxn],ne[maxn],h[maxn],idx;
int f[maxn],u[maxn],din[maxn],dout[maxn];
int q[maxn];
int n,m;

void add(int a,int b,int w) {
    val[idx]=w,e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}

void topsort() {
    int hh=0, tt=-1;
    for(int i=1; i<=n; i++)
        if(!din[i]) q[++tt]=i;

    while(hh<=tt) {
        int t=q[hh++];
        for(int i=h[t]; i!=-1; i=ne[i]) {
            int j=e[i];
            if(--din[j]==0) q[++tt]=j;
        }
    }
}

int main() {
    cin>>n>>m;
    for(int i=1; i<=n; i++) {
        cin>>f[i]>>u[i];
        if(!f[i]) f[i]-=u[i];
    }
    memset(h,-1,sizeof h);

    while(m--) {
        int a,b,c;
        cin>>a>>b>>c;
        add(a,b,c);
        dout[a]++;
        din[b]++;
    }

    topsort();

    for(int i=0; i<n; i++) {
        int j=q[i];
        if(f[j]>0) {
            for(int k=h[j]; k!=-1; k=ne[k])
                f[e[k]]+=f[j]*val[k];
        }
    }

    bool flag=true;
    for(int i=1; i<=n; i++)
        if(!dout[i] && f[i]>0) {
            cout<<i<<" "<<f[i]<<endl;
            flag=false;
        }

    if(flag) cout<<"NULL"<<endl;

    return 0;
}

/*
in:
5 6
1 0
1 0
0 1
0 1
0 1
1 3 1
1 4 1
1 5 1
2 3 1
2 4 1
2 5 1

out:
3 1
4 1
5 1
*/




【参考文献】
https://www.acwing.com/solution/content/3706/
https://blog.csdn.net/hnjzsyjyj/article/details/139369904
https://blog.csdn.net/hnjzsyjyj/article/details/129811447




 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1817149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ansible离线安装docker

docker简介&#xff1a; Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及应用的运行环境到一个可移植的容器中。这个容器可以在任何支持Docker的机器上运行&#xff0c;确保了应用在不同环境中的一致性。 网上有很多在线ansible安装docker的&…

决策树 #数据挖掘 #Python

拓展&#xff1a; sklearn简介&#xff1a; sklearn&#xff08;Scikit-learn&#xff09;是一个广泛使用的Python机器学习库&#xff0c;它是由Pedregosa等人在2011年创建的。这个库是基于NumPy和SciPy库构建的&#xff0c;提供了一系列简单易用的接口&#xff0c;用于数据预处…

从源码分析 vllm + Ray 的分布式推理流程

一、前言 随着 LLM 模型越来越大&#xff0c;单 GPU 已经无法加载一个模型。以 Qwen-14B-Chat 模型为例&#xff0c;模型权重大概 28GB&#xff0c;但是单个 NVIDIA A10 仅有 24GB 显存。如果想要在 A10 上部署 Qwen-14B-Chat 模型&#xff0c;我们需要将模型切分后部署到 2 个…

Vue2+Element-ui实现el-table表格自适应高度

效果图 新建指令 Vue.directive(height, {inserted(el, _binding, vnode) {const paginationRef vnode.context.$refs.paginationRefconst calculateHeight () > {const windowHeight window.innerHeightconst topOffset el.getBoundingClientRect().topconst otherEle…

怎么提高音频的播放速度?提高音频播放速度的四种方法

怎么提高音频的播放速度&#xff1f;提高音频的播放速度是在处理音频文件时经常需要面对的问题。音频播放速度的调整可以带来多种应用场景和效果&#xff0c;例如加快语音记录的回放速度以节省时间、提高听力理解和语速训练的效果等。然而&#xff0c;对于不同的音频播放工具和…

【Python】Python 2 测试网络连通性脚本

文章目录 前言1. 命令行传参2. 代码 前言 最近在只有python2的服务器上部署服务&#xff0c;不能用三方类库&#xff0c;这里出于好奇心学习下python。这里简单做个脚本&#xff0c;实现了检验网络连通性的功能&#xff08;类似于curl&#xff09;。 1. 命令行传参 使用命令…

LeetCode | 58.最后一个单词的长度

这道题要求最后一个单词的长度&#xff0c;第一个想到的就是反向遍历字符串&#xff0c;寻找最后一个单词并计算其长度。由于尾部可能会有’ &#xff0c;所以我们从后往前遍历字符串&#xff0c;找到第一个非空格的字符&#xff0c;然后记录下到下一个空格前依次有多少个字母即…

芯片后端对于芯片设计公司的重要性

在芯片设计流程中&#xff0c;后端设计是一个至关重要的环节&#xff0c;它直接关系到芯片从设计到实际生产的转化&#xff0c;以及最终产品的性能、可靠性、成本和上市时间。 以下是为什么芯片后端非常重要的几个关键原因&#xff1a; 物理实现&#xff1a;后端设计是芯片从逻…

20240612前端问题总结

20240612前端问题总结 给定固定大小的父 子盒子&#xff0c;要实现子盒子上下左右居中 使用calc()计算&#xff0c;子绝父相和子元素调整位置&#xff0c;flex弹性盒布局&#xff0c;transform&#xff0c;table-cell&#xff0c;浮动六种方法展示子元素垂直水平居中。 <…

人工智能系统中毒是一个日益严重的威胁

咨询公司 Protiviti 最近与一家客户公司合作&#xff0c;该公司遭遇了一次不寻常的攻击&#xff1a;一名黑客试图操纵输入该公司人工智能系统的数据。 公司领导仍在调查此次攻击&#xff0c;公司怀疑黑客试图扭曲人工智能系统的输出。 此类攻击并非新鲜事&#xff0c;但在网络…

stable diffusion中的negative prompt是如何工作的

https://stable-diffusion-art.com/how-negative-prompt-work/https://stable-diffusion-art.com/how-negative-prompt-work/https://zhuanlan.zhihu.com/p/644879268

技术速递|Microsoft Build 2024 中的 .NET 公告和更新

作者&#xff1a;.NET 团队 排版&#xff1a;Alan Wang 在 Microsoft Build 2024 上&#xff0c;我们很高兴推出一系列旨在使 .NET 开发更快、更容易的新功能和工具。 探索 Microsoft Build 2024 上的 .NET 会议&#xff0c;了解新功能的实际效果&#xff0c;或者通过下载 .NE…

【六】Linux安装部署Nginx web服务器--及编写服务器启动脚本

一、部署安装nginx 1、查看nginx是否安装依赖包 [rootlocalhost ~]# rpm -q zlib-devel pcre-devel package zlib-devel is not installed package pcre-devel is not installed 2、若没有则安装nginx 依赖包 [rootlocalhost ~]# yum -y install zlib-devel* pcre-dev…

30、 shell脚本进阶

shell脚本ifcase 一、条件测试 1.1、条件测试&#xff1a;$?----返回码&#xff0c;判断命令或者脚本是否执行成功&#xff08;最近的一条&#xff09; 0 true 为真就是成功 成立 非0 false 失败或者异常。 二、test命令 test命令&#xff1a;可以进行条件测试&#xff…

RAM IP核配置

REVIEW 之前已经学习过&#xff1a; ROM:FPGA寄存器 Vivado IP核-CSDN博客 串口接收&#xff1a;Vivado 串口接收优化-CSDN博客 1. 今日摸鱼计划 RAM创建与测试 小梅哥视频&#xff1a; 21C_嵌入式块存储器RAM介绍_哔哩哔哩_bilibili 21D_嵌入式块存储器RAM实现和仿真_哔哩…

C++ 实现HTTP的客户端、服务端demo和HTTP三方库介绍

本文使用C模拟实现http的客户端请求和http的服务端响应功能&#xff0c;并介绍几种封装HTTP协议的三方库。 1、实现简单HTTP的服务端功能 本程序使用C tcp服务端代码模拟HTTP的服务端&#xff0c;服务端返回给客户端的消息内容按照HTTP协议的消息响应格式进行了组装。 demo如…

腾讯云 BI 数据分析与可视化的快速入门指南

前言 腾讯云 BI 是一款商业智能解决方案&#xff0c;提供数据接入、分析、可视化、门户搭建和权限管理等全流程服务。它支持敏捷自助设计&#xff0c;简化报表制作&#xff0c;并通过企业微信等渠道实现协作。产品分为个人版、基础版、专业版和私有化版&#xff0c;满足不同规…

联想电脑 调节屏幕亮度不起使用,按F5,F6,屏幕上的hotkeys进度条是在改变,但是屏幕没有一些作用的处理方法

1、查看驱动是否正常 Win键X &#xff0c;设备管理器 发现似乎挺正常的。 查看原厂驱动&#xff1a;联想电脑管家 这样看来&#xff0c;驱动是没有问题了。 2、看看设置电池模式 其实还是这个电池模式的问题导致。 如果处于养护模式的话&#xff0c;充电只在75%~80%&#x…

探索Edge

目录 1.概述 1.1.什么是浏览器 1.2.浏览器的作用 2.Edge 2.1.什么是Edge 2.2.诞生背景 2.3.历史版本 2.4.作用 2.5.优缺点 2.5.1.优点 2.5.2.缺点 3.对比 3.1.和360浏览器的对比 3.2.和谷歌浏览器&#xff08;Chrome&#xff09;的对比 4.未来展望 5.总结 1.概…

浏览器f12控制台怎么获取vue实例,并且修改data数据

我们在日常的生产工作中&#xff0c;经常会遇到一些问题&#xff0c;比如&#xff0c;若产品已经部署&#xff0c;或是目前无法查看源代码&#xff0c;或者向用命令直接修改查询默认表单数据&#xff0c;那我们怎么去查看Vue实例呢&#xff1f; 我们在浏览器直接打印this不能得…