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. aspose插入图片

    当使用以下代码插入图片时 int iIndex = sheet.Pictures.Add(x, y, PicturePath); Aspose.Cells.Drawing.Picture pic = ...

  2. UCB博士资格考试试题

    https://math.berkeley.edu/~myzhang/qual.html?tdsourcetag=s_pcqq_aiomsg <!-- Page Content --> & ...

  3. SDN-数据控制分离

    严格来说,控制面与数据面分离并不是SDN的专利.从一个chassis角度看,传统路由器其实控制面和转发面也是分离的.Route-enginee和line card分别负责控制面板和转发面.但是传统网络 ...

  4. mysql 时间,时间戳,字符串之间相互转换

    时间转字符串 date_format(now(),'%Y-%m-%d') 时间转时间戳 unix_timestamp(now()) 字符串转时间 str_to_date('2020-01-19','% ...

  5. SMTP模块发送邮件

    import os import smtplib # 处理多种形态的邮件主体我们需要 MIMEMultipart 类 from email.mime.multipart import MIMEMult ...

  6. 基于EFCore3.0+Dapper 封装Repository

    Wei.Repository 基于EFCore3.0+Dapper 封装Repository,实现UnitOfWork,提供基本的CURD操作,可直接注入泛型Repository,也可以继承Repos ...

  7. Windows里面的虚拟机,部署的项目在同一网段也可以访问到

    一直想对自己Linux里面部署的项目进行再同一网段进行共享让其他和我同网段的人都看到 今天对于这个问题我终于解决了 首先编辑自己的虚拟机 进行虚拟机网络编辑 选择VMnet8 然后进行下面的NET设置 ...

  8. 洛谷P3381 MCMF【网络流】

    题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入格式 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向 ...

  9. 微信小程序open-data userAvatarUrl圆角显示

    从年初开始,打开小程序,工具栏都会弹出这个提醒: 也就是,默认不弹出授权询问框,默认获取不到用户信息(头像.昵称等)! 如果你需要用到这个接口,可以尝试以下方法: 1.用 button 组件,将属性名 ...

  10. Sql注入之注入点类型和是否存在注入判断

    SQL注入之判断注入类型注入类型分为数字型和字符型和搜索型例如数字型语句:select * from table where id =3,则字符型如下:select * from table wher ...