【拓扑排序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】python常用模块
一.模块.包 什么是模块? 模块实质上就是一个python文件,它是用来组织代码的,意思就是说把python代码写到里面,文件名就是模块的名称,test.py test就是模块名称. 什么是包? 包, ...
- Oracle 学习----:ora-00054 资源正忙 ,但指定以nowait方式获取资源 ,或者超时失效---解决方法
1.查询被锁的会话ID: select session_id from v$locked_object;查询结果:SESSION_ID-------92.查询上面会话的详细信息: SELECT sid ...
- 1043 Is It a Binary Search Tree (25 分)(二叉查找树)
#include<bits/stdc++.h> using namespace std; typedef struct node; typedef node *tree; struct n ...
- 深入理解CSS中的margin
1.css margin可以改变容器的尺寸 元素尺寸 可视尺寸--标准盒子模型中盒子的宽度是不包括margin值的,clientWidth 占据尺寸--包括margin的宽度 outWidth不在标准 ...
- JavaScript里面的面向对象
1.JavaScript里面没有类,但是利用函数可以起到类似的作用,例如简单的构造方法,跟Python差别不大 function f1(mame,age){ this.Name = name; thi ...
- 七、LSP 里氏替换原则
子类的对象提供了父类的所有行为,且加上子类额外的一些东西(可以是功能,可以是属性).当程序基于父类实现时,如果将子类替换父类而程序不需修改,则说明符合LSP原则. 这个解释看的似懂非懂,再看下面更进一 ...
- Java性能监控之Instrumentation
注:网上摘取的资料整理出来,供大家学习理解,希望有所帮助. 1.1. Instrumentation 简介 利用 Java 代码,即 java.lang.instrument 做动态 Ins ...
- [洛谷P3978][TJOI2015]概率论
题目大意:对于一棵随机生成的$n$个结点的有根二叉树,所有不同构的形态等概率出现(这里同构当且仅当两棵二叉树根相同,并且相同节点的左儿子和右儿子都相同),求叶子节点个数的期望是多少? 题解:令$f_n ...
- [bzoj3514][CodeChef GERALD07] Chef ans Graph Queries [LCT+主席树]
题面 bzoj上的强制在线版本 思路 首先可以确定,这类联通块相关的询问问题,都可以$LCT$+可持久化记录解决 用LCT维护生成树作为算法基础 具体而言,从前往后按照边的编号顺序扫一遍边 如果这条边 ...
- codeforces ~ 1009 B Minimum Ternary String(超级恶心的思维题
http://codeforces.com/problemset/problem/1009/B B. Minimum Ternary String time limit per test 1 seco ...