Description

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

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

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

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

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

Input

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

Output

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

Sample Input

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

Sample Output

3 1 
4 1 
5 1

Source

NOIP2003
图论 ,递推 , 拓扑排序 ,搜索, 模拟

Solution

本题是拓扑排序模板题。

由于1≤n≤100(CJOJ上n≤200),因此可以用邻接矩阵存图。

最后,注意输出的判断,就可以AC这道题了!

Code

 #include <bits/stdc++.h>

 using namespace std;

 inline int read()//快速读入
{
int f=,x=;
char c=getchar(); while(c<'' || c>'')
{
if(c=='-')f=-;
c=getchar();
} while(c>='' && c<='')
{
x=x*+c-'';
c=getchar();
} return f*x;
} int fl,n,m,p,c[],u[],r[],o[],q[][],t[],tail,head; int main()
{
n=read(),p=read(); for(register int i=; i<=n; i++)
{
c[i]=read(),u[i]=read(); if(c[i]!=)//第一层的直接加入队列
{
t[++tail]=i;
}
else
{
c[i]=c[i]-u[i];//其它层数可以直接减去u[i]
}
} for(register int i=; i<=p; i++)
{
int x=read(),y=read(),w=read(); q[x][y]=w;//邻接矩阵存图 ++r[y],++o[x];//记录入度和出度
} for(register int i=; i<=n; i++)
{
if(r[i]==)
{
t[++tail]=i;//将入度为0的点加入队列
}
} while(head<tail)//拓扑排序
{
++head; if(c[t[head]]>)
{
for(register int i=; i<=n; i++)
{
if(q[t[head]][i]!=)//如果当前节点与节点i有边
{
c[i]=c[i]+q[t[head]][i]*c[t[head]];//利用公式计算 t[++tail]=i;//加入队列
}
} if(o[t[head]]!=)//除了最后一层都要将最初状态清零
{
c[t[head]]=;
}
}
} for(register int i=; i<=n; i++)//输出
{
if(c[i]>)//如果状态大于0
{
printf("%d %d\n",i,c[i]);//输出 fl=;//标记有解
}
} if(!fl)//输出无解
{
printf("NULL");
} return ;//结束
}

题解【洛谷P1038/CJOJ1707】[NOIP2003提高组]神经网络的更多相关文章

  1. 洛谷-乘积最大-NOIP2000提高组复赛

    题目描述 Description 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你 ...

  2. 洛谷-铺地毯-NOIP2011提高组复赛

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...

  3. 洛谷 P2196 挖地雷 & [NOIP1996提高组](搜索,记录路径)

    传送门 解题思路 就是暴力!!! 没什么好说的,总之,就是枚举每一个起点,然后暴力算一遍以这个点为起点的所有路径,在算的过程中,只要比目前找到的答案更优,就有可能是最后的答案,于是就把路径更新一遍,保 ...

  4. 洛谷P1082 同余方程 [2012NOIP提高组D2T1] [2017年6月计划 数论06]

    P1082 同余方程 题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输 ...

  5. [NOIp2003提高组]神经网络

    OJ题号:洛谷1038 思路:拓扑排序,注意细节.1.题目中求和运算$C_i=\displaystyle{\sum_{(j,i)\in E}W_{ji}C_j-U_i}$中$U_i$在求和运算外,只要 ...

  6. 洛谷-统计数字-NOIP2007提高组复赛

    题目描述 Description 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照 ...

  7. 洛谷 3959 宝藏 NOIP2017提高组Day2 T2

    [题解] 状压DP. f[i]表示现在的点是否连接的状态是i. #include<cstdio> #include<cstring> #include<algorithm ...

  8. 洛谷-均分纸牌-NOIP2002提高组复赛

    题目描述 Description 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸 ...

  9. 洛谷-拼数-NOIP1998提高组复赛

    题目描述 Description 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213 又如:n=4 ...

随机推荐

  1. win10中Pycharm连接mysql时区错误的解决

    今天,突然想试下在win10中Django学习,好不容易把Mysql设置完毕,数据库也建好了,可连接测试通不过: Server returns invalid timezone. Go to 'Adv ...

  2. 咸鱼的ACM之路:DFS水题集

    DFS的核心就是从一种状态出发,转向任意的一个可行状态,直到达到结束条件为止.(个人理解) 下面全是洛谷题,毕竟能找到测试点数据的OJ我就找到这一个....在其他OJ上直接各种玄学问题... P159 ...

  3. SpringBoot整合WEB开发--(八)启动任务系统

    简介: 有一些特殊的任务需要在系统启动时执行,例如配置文件的加载,数据库初始化等操作,如果没有使用SpringBoot,这些问题可以在Listener中解决.SpringBoot提供了两种解决方案:C ...

  4. linux--权限管理和用户管理

    权限 查看详细信息 ls -l - rw- r-- r-- 1 tom root 0 Jun 20 00:02 apple.txt 1 2 3 4 5 6 7 8 9 10 #1 文件的类型 #[-: ...

  5. Uva 1609 Feel Good

    题面:给出长度为n的数列,然后算出其区间和乘区间最小数所能得到的最大值,并且输出区间 样例输入: 6 3 1 6 4 5 2 样例输出: 60 3 5 原题链接:https://vjudge.net/ ...

  6. kanbanflow的使用

    也许在工作中大家都听说过番茄工作法,就是每次在一个番茄钟25分钟内保持高度专注,并且在时间结束的时候会提醒你,然后稍作休息5分钟:此外,在产品迭代开发过程中常常会接受到不同的task:那么,我们是否可 ...

  7. mac 复制文件路径

    选中文件 ctrl + option +c  可以复制文件路径

  8. shell输入输出

    输出 一.echo命令介绍 1.功能:将内容输出到默认显示设备 2.语法:echo [-ne] [字符串] :输出的字符串以空格隔开,默认会加上换行符 3.选项 -n 不要在最后自动换行 -e 如果字 ...

  9. Bootstrap框架中radio设置值

    Bootstrap中的radio设置值不能像我们平常给普通radio赋值那样,因为无效. 我们用Bootstrap框架里的radio组件,代码: <div class="radio-l ...

  10. C++——标准模板库

    1.泛型程序设计:将程序尽可能写的通用,将算法从特定的数据结构中抽象出来,成为通用的:C++模板为泛型程序设计奠定了关键的基础:STL是泛型程序设计的一个范例:容器container.迭代器itera ...