题目

因此我们先分析一下题目的坑点。

1:

题目的图分为输入层,输出层,以及中间层。

我们怎么判断呢???可以判断每个点的入度及出度。如果一个点的入度为零则它是输入层,出度为零则是输出层。其余情况便是中间层。

因为根据原题所描述的

公式中的 Wji​ (可能为负值)表示连接 j 号神经元和 i 号神经元的边的权值。

当 C_i 大于 0 时,该神经元处于兴奋状态,否则就处于平静状态。当神经元处于兴奋状态时,下一秒它会向其他神经元传送信号,信号的强度为 C_i​。

我们可以得出只有一个点是终点时,才会满足上述公式,或者说是(非输入层),因此我们可以想到如果想让一个中间层或输出层的状态确定,那么与他相连的边的Cj值都要乘上,如果有一条不乘上,就不满足。

很容易想到现在所有的Cj的值必须是已经算出来的了。

因此我们可以想到拓扑排序,因为拓扑排序的条件就是这个点与他相连的边的起点都要先完成他们的任务。

2:

根据上文所知,C值一开始是不确定的,所以我们可以新建一个now数组,来表示现在这个点的状态值,当他相连边的起点都加到now的值上时,即入度为0,那此时的now值就是他的状态值。

但是这里有一个大坑点:只有这条边的起点的C值>0时才可以加上。

并且你不能在刚取出这个起点的时候就判断(别问我怎么知道的)。

因为如果你判断了,那终点的入度就减不了了。

用拓扑排序的套路,把这个点入队。再反复进行上面的几步。

分析完这个题的坑点,基本上这个题就解决了。

代码:

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
queue<int>q;
int n,m,in_degree[],out_degree[];
bool flag;
int tot,lin[];
int c[],u[],now[];//now是现在的状态值,并不是最终的。
struct cym {
int from,to,next,len;
} e[];
void add(int x,int y,int v)
{
e[++tot].from=x;
e[tot].to=y;
e[tot].len=v;
e[tot].next=lin[x];
lin[x]=tot;
in_degree[y]++;//判断是否是输出层和输入层及拓扑排序
out_degree[x]++;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=; i<=n; i++)
scanf("%d%d",&c[i],&u[i]);
for(int i=; i<=m; i++) {
int x,y,v;
scanf("%d%d%d",&x,&y,&v);
add(x,y,v);
}
for(int i=; i<=n; i++)
if(!in_degree[i])//如果这个点是输入层他的状态是最先确定的,因此根据FIFO原则,用队列优化,也是拓扑排序的方法。
q.push(i);
while(!q.empty()) {
int cur=q.front();
q.pop();
//if(c[cur]<=0)加上这两句是不行的,因为要减去下文的入度
//continue;
for(int i=lin[cur]; i; i=e[i].next)
{
in_degree[e[i].to]--;
if(c[e[i].from]>)//判断该点是否可以向下传递
now[e[i].to]+=c[e[i].from]*e[i].len;
if(!in_degree[e[i].to])//当入度为零时说明所有先决条件都已满足,满足拓扑排序,可以入队
{
now[e[i].to]-=u[e[i].to];//别忘了减去阈值
c[e[i].to]=now[e[i].to];
q.push(e[i].to);
}
}
}
for(int i=; i<=n; i++)
if(out_degree[i]==&&c[i]>)//判断是否为输出层且最后状态>0
{
flag=;
printf("%d %d\n",i,c[i]);
}
if(!flag)
printf("NULL");
}

洛谷P1038神经网络题解的更多相关文章

  1. 洛谷P1038 神经网络题解

    注意如果是 \(if(c[i])\) 这条语句并没有说明c[i]不为负数,所以说最好老老实实的写 #include<cstdio> #define _ 0 using namespace ...

  2. 洛谷P1038 神经网络==codevs1088 神经网络

    P1038 神经网络 题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款风险评估等诸多领域有广泛的应用.对神 ...

  3. 洛谷P1038 神经网络

    P1038 神经网络 题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款风险评估等诸多领域有广泛的应用.对神 ...

  4. 洛谷——P1038 神经网络

    P1038 神经网络 题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款风险评估等诸多领域有广泛的应用.对神 ...

  5. 洛谷 P1038 神经网络 Label:拓扑排序 && 坑 60分待查

    题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款风险评估等诸多领域有广泛的应用.对神经网络的研究一直是当今 ...

  6. 洛谷P1038 神经网络(bfs,模拟,拓扑)

    题目背景 人工神经网络(Artificial Neural NetworkArtificialNeuralNetwork)是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款风险评估等诸 ...

  7. 洛谷 P1038 神经网络

    题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款风险评估等诸多领域有广泛的应用.对神经网络的研究一直是当今 ...

  8. [NOIP2003] 提高组 洛谷P1038 神经网络

    题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款风险评估等诸多领域有广泛的应用.对神经网络的研究一直是当今 ...

  9. 洛谷P1038神经网络

    传送门啦 一个拓扑排序的题,感觉题目好难懂... #include <iostream> #include <cstdio> #include <cstring> ...

随机推荐

  1. 4月27号开学! 第6期《jmeter实战接口自动化+性能》课程,零基础也能学

    2019年 第6期<jmeter实战接口自动化+性能>课程,4月27号开学! 主讲老师:飞天小子 上课方式:QQ群视频在线教学 本期上课时间:4月27号-6月9号,每周六.周日晚上20:0 ...

  2. LNK2022: 元数据操作失败(8013118D): 重复类型(FactoryContext)中的布局信息不一致: (0x02000230)

    1. c++项目 A 编译成A.lib文件 2. c++项目B引用这个A.lib文件 3. A项目存在一个类跟B项目一样,但是A项目其他文件需要这个类里面的某些东西,我将不需要的全部注释掉,然后编译A ...

  3. xadmin的使用

    01-下载源码 GitHub地址:https://github.com/sshwsfc/xadmin # 安装xadmin 由于使用的是Django2.0的版本,所以需要安装xadmin项目djang ...

  4. NYOJ-16-矩形嵌套 记忆化搜索

    #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...

  5. applicationContext.xml 模板

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  6. DOM节点左右移动

    闲来没事写了个小demo,原本是回答别人博问的,有人比我更快的给出了链接,想想半途而废也不好,就写完了,写个博文记录一下(效果是按照我自己来的,可能和最早别人问的不太一样,反正无关紧要啦) 直接上co ...

  7. MongoDB之$

    MongoDB之$ $  保存符合索引条件的下标 db.userinfo.updateOne({ghobby: },{$set:{'ghobby.2': '四'}}) // 将userinfo表中的g ...

  8. Linux之查看系统配置命令

    1.查看CPU个数: [root@ifusion ~]# lscpu 2.查看CPU进程数.核数: [root@ifusion ~]# cat /proc/cpuinfo 3.查看内存总量: [roo ...

  9. HTML,CSS笔记

    text-indent 属性规定文本块中首行文本的缩进.允许使用负值.如果使用负值,那么首行会被缩进到左边.p{ text-indent:50px; } HTML <label> 标签的 ...

  10. Oracle undo 表空间不可用

    由于某次不小心操作,在切换表空间时没有成功,由于把undo的配置参数 undo_management值设置为MANUAL所以在启动数据库时没有报任何错误,但是给表插入数据时报错了,回滚段不可用的错误. ...