【拓扑排序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分. 后来看题解发现,大家都是边拓扑边进行 ...
随机推荐
- Python 3基础教程12-常见的错误
本文来介绍几种常见的错误,任何人在刚开始接触一个新的语言,即使照着代码抄写,也可能会犯错误,这里我们就介绍几种常见的错误,看看你是否遇到过. 1. NameError: name 'xxx' is n ...
- KMS激活windows
slmgr /skms 106.0.6.209 slmgr /ato .查看当前系统是否永久激活,命令的作用是查看当前许可证状态的截止日期 slmgr.vbs -xpr 查看Windows正式版产品密 ...
- 软工实践Alpha冲刺(7/10)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 已经解决登录注册等基本功能的界面. 完成非功能的主界面制作 ...
- 虚拟机——vmtools安装出现Detected GCC binary at usr.bin.gcc.
在安装VMWare Tools遇到过这样一个问题 Searching for GCC... Detected GCC binary at "/usr/bin/gcc". The p ...
- Codeforces Round #352 (Div. 2) B
B. Different is Good time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- mvvm实现
https://segmentfault.com/a/1190000006599500 http://blog.csdn.net/pur_e/article/details/53066275
- bzoj1861 [Zjoi2006]Book 书架 splay
小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下一本.由于这些书太有吸引 ...
- VMware DRS概述及功能
通过动态分配和平衡计算资源,使您的 IT 基础架构与业务目标一致.VMware Distributed Resource Scheduler (DRS) 可持续监控所有资源池的利用率,并根据业务需求在 ...
- 物理和虚拟兼容性RDM的区别
Difference between Physical compatibility RDMs and Virtual compatibility RDMs (2009226) Purpose This ...
- PriorityQueue详解(一)
在Java SE 5.0中,引入了一些新的Collection API,PriorityQueue就是其中的一个.今天由于机缘巧合,花了一个小时看了一下这个类的内部实现,代码很有点意思,所以写下来跟大 ...