3076: 神经网络

时间限制: 1 Sec  内存限制: 125 MB
提交: 7  解决: 5
[提交][状态][讨论版][命题人:外部导入][Edit] [TestData] [同步数据]

题目描述

人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。对神经网络的研究一直是当今的热门方向,兰兰同学在自学了一本神经网络的入门书籍后,提出了一个简化模型,他希望你能帮助他用程序检验这个神经网络模型的实用性。

在兰兰的模型中,神经网络就是一张有向图,图中的节点称为神经元,而且两个神经
元之间至多有一条边相连,下图是一个神经元的例子:

图中,X1—X3是信息输入渠道,Y1—Y2是信息输出渠道,C1表示神经元目前的状态,Ui是阈值,可视为神经元的一个内在参数。

神经元按一定的顺序排列,构成整个神经网络。在兰兰的模型之中,神经网络中的神经无分为几层;称为输入层、输出层,和若干个中间层。每层神经元只向下一层的神经元输出信息,只从上一层神经元接受信息。下图是一个简单的三层神经网络的例子。

兰兰规定,Ci服从公式:(其中n是网络中所有神经元的数目)

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

输入

每组输入第一行是两个整数n(1≤n≤20)和p。接下来n行,每行两个整数,第i+1行是神经元i最初状态和其阈值(Ui),非输入层的神经元开始时状态必然为0。再下面P行,每行由两个整数i,j及一个整数Wij,表示连接神经元i、j的边权值为Wij。

输出

每组输出包含若干行,每行有两个整数,分别对应一个神经元的编号,及其最后的状态,两个整数间以空格分隔。仅输出最后状态非零的输出层神经元状态,并且按照编号由小到大顺序输出!
若输出层的神经元最后状态均为 0,则输出 NULL。

 

样例输入

  1. 5 6
  2. 1 0
  3. 1 0
  4. 0 1
  5. 0 1
  6. 0 1
  7. 1 3 1
  8. 1 4 1
  9. 1 5 1
  10. 2 3 1
  11. 2 4 1
  12. 2 5 1

样例输出

  1. 3 1
  2. 4 1
  3. 5 1

提示

 
思路:按照神经的网络传播进行模拟,一层一层,层序遍历,
  1. #include<iostream>
  2. #include<cmath>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<string>
  6. #include<algorithm>
  7. #include<map>
  8. #include<queue>
  9. #include<vector>
  10. #define ll long long
  11. using namespace std;
  12. struct node{
  13. int to;
  14. int w;
  15. };
  16. struct point{//队列里放的东西,x代表第几个点,lay表示第几层
  17. int x;
  18. int lay;
  19. };
  20. vector<node>vi[];//存i点与哪些点相连
  21. queue<point>fir;
  22. int ci[];
  23. int ui[];
  24. bool inq[];//标记在不在队列里
  25. int in[];//记录入度
  26. int main(){
  27. int n,m;
  28. cin>>n>>m;
  29. while(!fir.empty()) fir.pop();
  30. memset(inq,,sizeof(inq));
  31. memset(in,,sizeof(in));
  32. for(int i=;i<=n;i++)
  33. {
  34. cin>>ci[i]>>ui[i];
  35. if(ci[i]!=)
  36. {
  37. point p;
  38. p.lay=;
  39. p.x=i;
  40. fir.push(p);
  41. inq[i]=;
  42. }
  43. }
  44. for(int i=;i<=m;i++)
  45. {
  46. int u,v,w;
  47. cin>>u>>v>>w;
  48. node no;
  49. no.to=v;
  50. no.w=w;
  51. vi[u].push_back(no);
  52. in[v]++;
  53. }
  54. //fir队列里存放当前这一层,一层层遍历
  55. //相当于来个bfs
  56. while(!fir.empty())
  57. {
  58. point p = fir.front();
  59. fir.pop();
  60. inq[p.x]=; //标记不在队列里
  61. //cout<<"取出"<<p.x<<endl;
  62. //cout<<"ci"<<ci[p.x]<<endl;
  63. //拿p.x这个点更新与它相连的边
  64. for(int i=;i<vi[p.x].size();i++)
  65. {
  66. //消去与它相邻的边
  67. node no = vi[p.x].at(i);
  68. int to = no.to;
  69. in[to]--;
  70. //cout<<"相邻边"<<to<<endl;
  71. if(in[to]==)//如果这个点没有入度了,说明已经计算完了ci*wi,要减去ui
  72. {
  73. ci[to]-=ui[to];
  74. }
  75. if(ci[p.x]>)
  76. {
  77. //先更新
  78. ci[to] += no.w*ci[p.x];
  79. //cout<<"更新"<<to<<" "<<ci[to]<<endl;
  80. //再把它放到队列里去,并更新lay
  81. if(inq[to]==)
  82. {//如果不在队列里,就把它放进去
  83. point p2;
  84. p2.x = to;
  85. p2.lay = p.lay+;//层数在这个点的基础上+1
  86. inq[to]=;//标记在队列里
  87. fir.push(p2);
  88. }
  89. }
  90. }
  91. }
  92. //找没有出度的点,输出它的值即可
  93. bool f = ;//是不是没有输出
  94. for(int i=;i<=n;i++)
  95. {
  96. if(vi[i].size()==)//找到输出层
  97. {
  98. if(ci[i]>)
  99. {
  100. f=;
  101. cout<<i<<" "<<ci[i]<<endl;
  102. }
  103. }
  104. }
  105. if(!f){
  106. cout<<"NULL"<<endl;
  107. }
  108. //for(int i=6;i<=7;i++){
  109. // cout<<"ci[i]"<<" "<<i<<" "<<ci[i]<<endl;
  110. //}
  111. return ;
  112. }
 
 
 
 
 

来源

[提交][状态][Edit] [TestData]

3076: 神经网络(bfs和拓扑排序)的更多相关文章

  1. hdu1532 用BFS求拓扑排序

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 题目给出一些点对之间的先后顺序,要求给出一个字典序最小的拓扑排列.对于拓扑排序的问题,我们有DF ...

  2. 图论相关知识(DFS、BFS、拓扑排序、最小代价生成树、最短路径)

    图的存储 假设是n点m边的图: 邻接矩阵:很简单,但是遍历图的时间复杂度和空间复杂度都为n^2,不适合数据量大的情况 邻接表:略微复杂一丢丢,空间复杂度n+m,遍历图的时间复杂度为m,适用情况更广 前 ...

  3. Luogu2164 SHOI2007 交通网络 期望、BFS、拓扑排序

    传送门 题目还算不难吧 首先我们枚举点$i$,将其他所有点到这个点的最短路求出来 然后我们在这一次建出的最短路$DAG$的反图上进行拓扑排序.假设我们算到了点$j$,点$j$的人流量为$t_j$,点$ ...

  4. leetcode_课程表(BFS、拓扑排序)

    题目描述: 你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 .在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹 ...

  5. (番外)使用DFS和BFS实现拓扑排序

    1.BFS实现 public class Solution { public int[] findOrder(int numCourses, int[][] prerequisites) { int[ ...

  6. HDU 4857 (反向拓扑排序 + 优先队列)

    题意:有N个人,M个优先级a,b表示a优先于b.而且每一个人有个编号的优先级.输出顺序. 思路来自:与PKU3687一样 在主要的拓扑排序的基础上又添加了一个要求:编号最小的节点要尽量排在前面:在满足 ...

  7. [ACM] POJ 3687 Labeling Balls (拓扑排序,反向生成端)

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10161   Accepted: 2810 D ...

  8. 拓扑排序 Topological Sort

    2018-05-02 16:26:07 在计算机科学领域,有向图的拓扑排序或拓扑排序是其顶点的线性排序,使得对于从顶点u到顶点v的每个有向边uv,u在排序中都在v前.例如,图形的顶点可以表示要执行的任 ...

  9. 拓扑排序详解(梅开二度之dfs版按字典序输出拓扑路径+dfs版输出全部拓扑路径

    什么是拓扑排序? 先穿袜子再穿鞋,先当孙子再当爷.这就是拓扑排序! 拓扑排序说白了其实不太算是一种排序算法,但又像是一种排序(我是不是说了个废话qwq) 他其实是一个有向无环图(DAG, Direct ...

随机推荐

  1. 『TensorFlow』SSD源码学习_其七:损失函数

    Fork版本项目地址:SSD 一.损失函数介绍 SSD损失函数分为两个部分:对应搜索框的位置loss(loc)和类别置信度loss(conf).(搜索框指网络生成的网格) 详细的说明如下: i指代搜索 ...

  2. pyqt小例子

    from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import QApplication, QMainWindow imp ...

  3. redis的数据类型及使用

    Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). String(字符串) st ...

  4. Python Flask之留言板(无数据库)

    一个py文件,一个html文件,可以直接运行 py文件 from flask import Flask, request, render_template, redirect, url_for imp ...

  5. vim 插件 -- NERDTree

    介绍 NERDTree 插件就是使vim编辑器有目录效果. 所谓无图无真相,所以直接看这个插件的效果图吧. 下载 https://www.vim.org/scripts/script.php?scri ...

  6. 跟随我在oracle学习php(7)

    盒子模型布局 盒子模型:每个标签都是一个盒子 计算宽高:box-sizing:border-box盒子的宽度就是设置的宽度,里面的内容自适应 从里到外:padding(内边距) Border(边框) ...

  7. 树形结构表的存储【转自:http://www.cnblogs.com/huangfox/archive/2012/04/11/2442408.html】

    在数据库中存储树形结构的数据,这是一个非常普遍的需求,典型的比如论坛系统的版块关系.在传统的关系型数据库中,就已经产生了各种解决方案. 此文以存储树形结构数据为需求,分别描述了利用关系型数据库和文档型 ...

  8. static静态全局变量和static静态局部变量

    static静态全局变量: 静态全局变量就是将全局变量变成静态的.如何变?——全局变量加个static. static就是一个存储类说明符,a这个全局变量就成了一个静态全局变量了. 静态全局变量的特点 ...

  9. python常见错误

    最近刚刚接触Python,为了养成好习惯,遇到了诸多的问题,林林总总,在这里简单记录下: 编写简单的python语句时: module level import not at top of file ...

  10. 获取Ueditor里面的图片列表,地址绝对化

    /**     * 内容中图片地址转成绝对地址     * @param $content     * @return mixed     */    private function imgUrl( ...