【拓扑排序topsort】【p1226】神经网络
描述 Description
神经网络就是一张有向图,图中的节点称为神经元,而且两个神经
元之间至多有一条边相连,下图是一个神经元的例子:
神经元〔编号为1)
图中,X1—X3是信息输入渠道,Y1-Y2是信息输出渠道,C1表示神经元目前的状态,
Ui是阈值,可视为神经元的一个内在参数。
神经元按一定的顺序排列,构成整个神经网络。在兰兰的模型之中,神经网络中的神
经元分为几层;称为输入层、输出层,和若干个中间层。每层神经元只向下一层的神经元
输出信息,只从上一层神经元接受信息。下图是一个简单的三层神经网络的例子。
兰兰规定,Ci服从公式:(其中n是网络中所有神经元的数目)
公式中的Wji(可能为负值)表示连接j号神经元和 i号神经元的边的权值。当 Ci大于0时,该神经元处于兴奋状态,否则就处于平静状态。当神经元处于兴奋状态时,下一秒它会向其他神经元传送信号,信号的强度为Ci。
如此.在输入层神经元被激发之后,整个网络系统就在信息传输的推动下进行运作。现在,给定一个神经网络,及当前输入层神经元的状态(Ci),要求你的程序运算出最后网络输出层的状态。
输入格式 Input Format
输入第一行是两个整数n(1≤n≤200)和p。接下来n行,每行两个整数,第i+1行是神经元i最初状态和其阈值(Ui),非输入层的神经元开始时状态必然为0。再下面P行,每行由两个整数i,j及一个整数Wij,表示连接神经元i、j的边权值为Wij。
输出格式 Output Format
输出包含若干行,每行有两个整数,分别对应一个神经元的编号,及其最后的状态,两个整数间以空格分隔。仅输出最后状态为兴奋状态的的输出层神经元状态,并且按照编号由小到大顺序输出!
若输出层的神经元最后状态均为 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
时间限制 Time Limitation
每个测试点1s
注释 Hint
每个测试点1s
来源 Source
NOIP2003第一题
topsort一直没搞,因为第一题一直过不去有点难受【不】。今天搞完一道看这一道,卡了我好几节课。。。
这道题细节要求很多,尤其是有坑。要注意的是计算出一个点之后,如果Ci<=0,不会继续往后传递信息,但是你记录top序的数组仍然要--【因为有边】,而且在判断是否有边应该额外开一个bool数组【因为存值的数组可能是负数,正数,0,不好直接用a[x][y]判断】。
记录是否是终点也很简单,只要没有以这个点为始边的边,那么就是终点了。
ps:数据有点坑,有一个只有单点的数据,当然你用if else水过没什么问题,然而是可以在topsort里进行计算通过的。
下面给出代码:
#include<bits/stdc++.h>
using namespace std;
int a[][];
bool f[][];
int id[];
int n,m;
struct qaq
{
int c,u;
}num[];
int q[];
int head=;
int tail=;
int sum[];
//int maxx=0;
int ans[]; void topsort()
{
for(int i=;i<=n;i++)
{
sum[i]=num[i].c;
if(id[i]==)
{
q[++tail]=i;
num[i].u=;
}
}
for(head=;head<=tail;++head)
{
int x=q[head];
//cout<<"---------"<<x<<endl;
num[x].c=sum[x]-num[x].u;
//cout<<x<<' '<<num[x].c<<endl;
for(int i=;i<=n;++i)
{
if(f[x][i])
{
//cout<<"---------"<<i<<' '<<id[i]<<endl;
--id[i];
//cout<<"---------"<<i<<' '<<id[i]<<endl;
if(num[x].c>)
{
sum[i]+=(a[x][i]*num[x].c);
}
if(id[i]==)
{
q[++tail]=i;
}
}
}
}
} int main()
{
//freopen("a.txt","r",stdin);
memset(ans,,sizeof(ans));
memset(f,,sizeof(f));
memset(id,,sizeof(id));
memset(sum,,sizeof(sum));
cin>>n>>m;
for(int i=;i<=n;++i)
{
int x,y;
scanf("%d%d",&x,&y);
num[i].c=x;
num[i].u=y;
}
for(int i=;i<=m;++i)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
a[x][y]=z;
f[x][y]=;
++id[y];
ans[x]=;
}
topsort();
bool flag=;
for(int i=;i<=n;i++)
{
//cout<<"--------------"<<num[i].c<<endl;
if(ans[i])
{
//cout<<"++++++"<<i<<endl;
//cout<<num[i].c<<endl;
if(num[i].c>)
{
flag=;
cout<<i<<' '<<num[i].c<<endl;
}
}
}
if(!flag) cout<<"NULL"<<endl;
return ;
}
【拓扑排序topsort】【p1226】神经网络的更多相关文章
- HDU.3342 Legal or Not (拓扑排序 TopSort)
HDU.3342 Legal or Not (拓扑排序 TopSort) 题意分析 裸的拓扑排序 根据是否成环来判断是否合法 详解请移步 算法学习 拓扑排序(TopSort) 代码总览 #includ ...
- HDU.2647 Reward(拓扑排序 TopSort)
HDU.2647 Reward(拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 这道题有一点变化是要求计算最后的金钱数.最少金钱值是888,最少的 ...
- HDU.1285 确定比赛名次 (拓扑排序 TopSort)
HDU.1285 确定比赛名次 (拓扑排序 TopSort) 题意分析 裸的拓扑排序 详解请移步 算法学习 拓扑排序(TopSort) 只不过这道的额外要求是,输出字典序最小的那组解.那么解决方案就是 ...
- 拓扑排序 topsort详解
1.定义 对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列. 举例: h3 { marg ...
- 拓扑排序 topsort
拓扑排序 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序 ...
- 拓扑排序(topsort)
本文将从以下几个方面介绍拓扑排序: 拓扑排序的定义和前置条件 和离散数学中偏序/全序概念的联系 典型实现算法解的唯一性问题 Kahn算法 基于DFS的算法 实际例子 取材自以下材料: http://e ...
- 算法学习 拓扑排序(TopSort)
拓扑排序 一.基本概念 在一个有向无环图(Directed Acyclic Graph, DAG)中,规定< u,v > 表示一条由u指向v的的有向边.要求对所有的节点排序,使得每一条有向 ...
- Luogu1038 神经网络 (拓扑排序)
拓扑排序,裸的,水的. 第一发:题读错,输出错,输入错,到处错 \(\longrightarrow\) 40pts (excuse me ?) 第二发:漏了输入层特判 \(\longrightarro ...
- NOIp2002神经网络 【拓扑排序】By cellur925
题目传送门 这道题目没有什么难的,是一道拓扑排序+递推的题目.我的思路是开始处理出拓扑序,然后因为数据范围很小怎么搞都可以,就邻接矩阵存图+暴力枚举.结果60分. 后来看题解发现,大家都是边拓扑边进行 ...
随机推荐
- ASP.NET Core ---异常处理
一.局部异常处理: 在Action里面catch 二.全局异常处理: 1.默认的异常处理配置: 默认配置在StartUp文件的Configure中注册错误处理,显示开发者错误页面: public vo ...
- 源码分析(一) HashMap 源码分析|JDK8
HashMap是一个普遍应用于各大JAVA平台的最最最常用的数据结构.<K,V>的存储形式使HashMap备受广大java程序员的喜欢.JDK8中HashMap发生了很大的变化,例如:之前 ...
- install ironic-inspector
安装相应的包和组件 yum install openstack-ironic-inspector python-ironic-inspector-client -y 创建user openstack ...
- leetcode 211. 添加与搜索单词 - 数据结构设计 解题报告
设计一个支持以下两种操作的数据结构: void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a- ...
- 深入探讨ui框架
深入探讨前端UI框架 1 前言 先说说这篇文章的由来 最近看riot的源码,发现它很像angular的dirty check,每个component ( tag )都保存一个expressions数组 ...
- Android可移动的Button
关键 package com.example.administrator.mystudent.ButtonMove; import android.app.Activity; import andro ...
- ubuntu16.04 使用问题笔记
1.问题: 下列软件包有未满足的依赖关系: vim : 依赖: vim-common (= 2:7.4.826-1ubuntu1) 但是 2:7.4.1689-3ubuntu1 正要被安装 E: 无法 ...
- 【Luogu】P2489迷宫探险(概率DP)
题目链接 设f[i][j][k][l]是当前在(i,j),对陷阱的了解状态为k(0表示了解该陷阱为无危险,1表示了解该陷阱有危险,2不了解),l表示当前血,走出迷宫的概率 dfsDP即可. 注意随时更 ...
- [CF632E]Thief in a Shop
题目大意:有一个小偷,拿$k$个东西,有$n$种产品,每种产品都有无限多个.对于每个第$i$ 种产品,它的价值是$A_i$.可能偷走的物品价值之和. 题解:对于所有的物品构造生成函数$F(x)=\su ...
- AE中实现Control中的各种图形工具的方法
添加命名空间 using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Controls; A类:前面有Controls 后面有tool的工具都可以用同一类的代码实现( ...