【拓扑排序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分. 后来看题解发现,大家都是边拓扑边进行 ...
随机推荐
- appium-手势密码实现-automationName 是automator2
上一篇博客已经说了 appium-手势密码实现-automationName 是Appium的情况 下面就说一下automator2的情况: 手势密码的moveTo方法的参数进行了改变. 参数是相对于 ...
- Python全栈工程师(Linux基本操作)
ParisGabriel Python 入门基础 Linux :Ubuntu操作系统 首先我们说的是Linux操作系统常用的快捷键以及终端命令 一. VMware ...
- shell之netstat命令
语 法:netstat [-acCeFghilMnNoprstuvVwx] [-A<网络类型>][--ip] 补充说明:利用netstat指令可让你得知整个Linux系统的网络情况. ...
- 爬虫:Scrapy7 - Scrapy终端(Scrapy shell)
Scrapy 终端是一个交互终端,可以在未启动 spider 的情况下尝试及调试你的爬取代码.其本意是用来测试提取数据的代码,不过可以将其作为正常的 Python 终端,在上面测试任何 Python ...
- HDU 4101 Ali and Baba (思路好题)
与其说这是个博弈,倒不如说是个搜索.这题思路不错,感觉很难把情况考虑周全. 在地图外围填充一圈0,两次BFS,第一次从-1点出发,把从-1到达的0点以及包围0的那一圈石头标记出来.如下图: 1 1 1 ...
- 第二阶段团队冲刺-four
昨天: 绘制logo. 今天: 用servlet完成名单打印功能. 遇到的问题: servlet中的获得的路径不是想要的.
- linux服务进程管理
1.查看linux占用内存/CPU最多的进程 查使用内存最多的10个进程 ps -aux | sort -k4nr | head -n 10 或者top (然后按下M,注意大写) 查使用CPU最多的1 ...
- sql server 中使用 LIKE 语句 SqlParameter 使用
原本写的 select * from table where name like '%@searchStr%' 怎么执行都不对,想想 参数是不能加 引号的 于是改为select * from tab ...
- [codeforces] 526D [51nod] 1554 欧姆诺姆和项链
原题 KMP 方法一: 听说是ex-kmp--来自学姐 ex-kmp是处理两个串s和t之间,t的每一个后缀在s中的最长前缀的长度的一个算法. 它很像manacher(至少我和学姐这么认为),记录了一个 ...
- 洛谷 P2114 [NOI2014]起床困难综合症 解题报告
P2114 [NOI2014]起床困难综合症 题目描述 21世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm一直坚持与起床困难综合症作 ...