首页 > 其他分享 >神经网络—拓扑排序

神经网络—拓扑排序

时间:2024-03-08 09:33:05浏览次数:28  
标签:输出 int 拓扑 tot 神经网络 edge ans 排序 神经元

输入格式

第一行是两个整数n(1≤n≤100)和p。

接下来n行,每行两个整数,第i+1行是神经元i最初状态和其阈值(Ui),非输入层的神经元开始时状态必然为0。

再下面P行,每行由两个整数i,j及一个整数Wij,表示连接神经元i、j的边权值为Wij。

输出格式

输出文件包含若干行,每行有两个整数,分别对应一个神经元的编号,及其最后的状态,两个整数间以空格分隔。仅输出最后状态非零的输出层神经元状态,并且按照编号由

小到大顺序输出!

若输出层的神经元最后状态均为 0,则输出 NULL。

样例

样例输入

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

样例输出

3 1
4 1
5 1

简单の思路:显然,这是一道拓扑排序的模板题,题目灰常之长,damn是只有一乃乃有用信息,这道题的指向性非常明确,就是让我们每一个点每一个点地去算值,只不过要用到前驱节点,而且我们要自行确定输入节点。神经网络结构满足 DAG,且我们就要进行类似 DP 一样的操作。我们可以使用拓扑排序确定顺序,再进行统计。

ACcode:

#include <bits/stdc++.h>
using namespace std;
const int N=110;
int n,m,u,x,y,z,tot,cnt;
int ans[N],head[N],out[N],in[N],num[N];
bool flag=0;
queue<int>q;  
struct node{
    int to,p,next;
}edge[N];

void add(int x,int y,int z){
    edge[++tot].to=y;
    edge[tot].next=head[x];
    edge[tot].p=z;
    head[x]=tot;
}

void topological_sort(){
    for(int i=1;i<=n;i++)
        if(in[i]==0) 
		    q.push(i);
    while(!q.empty()){
        int x=q.front();
		q.pop();
        num[++cnt]=x;
        for(int i=head[x];i;i=edge[i].next){
            int y=edge[i].to;
            if(--in[y]==0) q.push(y);
            if(ans[x]>0) ans[y]+=edge[i].p*ans[x];
        }
    }
}
int main(){
	ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>ans[i]>>u;
        if(ans[i]==0) ans[i]-=u;
    }
    for(int i=1;i<=m;i++){
        cin>>x>>y>>z;
        add(x,y,z);
		in[y]++;
		out[x]++;
    }
    topological_sort();
    
    for(int i=1;i<=n;i++){
    	if(out[i]==0&&ans[i]>0){
        	cout<<i<<' '<<ans[i]<<endl;
			flag=1;
		}
	}
    if(!flag) cout<<"NULL";
    return 0;
}

#一名爱打篮球的oier#

标签:输出,int,拓扑,tot,神经网络,edge,ans,排序,神经元
From: https://www.cnblogs.com/hzoiwzs/p/18060321

相关文章

  • 归并排序
    includeincludeusingnamespacestd;intn,a[100100],b[100100];templateinlinevoidread(type&x){x=0;boolflag(0);charch=getchar();while(!isdigit(ch))flag^=ch=='-',ch=getchar();while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),c......
  • VUE GRID WITH COMPONENT排序
    父组件:<!--Anexampleofcreatingareusablegridcomponentandusingitwithexternaldata.--><scriptsetup>importDemoGridfrom'../components/Grid.vue'import{ref}from'vue'constsearchQuery=ref('')......
  • 33. 搜索旋转排序数组(中)
    目录题目二分搜索题目整数数组nums按升序排列,数组中的值互不相同。在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为[nums[k],nums[k+1],...,nums[n-1],nums[0],nums[1],...,nums[k-1]](下标从0开始计数)。例如,[0,1......
  • 查找/排序算法
    //二分查找publicstaticbooleanBinarySearch(inttarget,int[]array){intleft=0;intright=array.length-1;while(left<=right){intmiddle=(left+right)/2;//中间位置if(array[middle]<target)......
  • mssql排序order by42000报错解决
    原文链接:https://blog.csdn.net/wang1qqqq/article/details/122961882在mssql查询中,如果子查询中使用orderby,会出现报错:[42000][Microsoft][ODBCDriver17forSQLServer][SQLServer]除非另外还指定了TOP、OFFSET或FORXML,否则,ORDERBY子句在视图、内联函数、派生表、子......
  • 深度学习-卷积神经网络-Faster RCNN anchor详解-53
    目录1.Anchor参考:https://zhuanlan.zhihu.com/p/86403390?utm_id=01.Anchor我第一次接触Anchor(中文叫做锚)的时候,比较懵逼的,什么是锚这个问题让思考了好久,这也是阻碍大家学习FasterRCNN最大的绊脚石索性我们就先把anchor理解为一个个按照固定比例(长宽、大小)预定义的框lib/ne......
  • linux对文件内容去重,排序与不排序
    方法一,使用uniq相关命令进行去重用法:uniq[选项]...[输入文件[输出文件]]从<输入文件>(或标准输入)中过滤内容相同的相邻的行,并写到<输出文件>(或标准输出)。不带选项时,内容相同的行将仅输出一次。长选项的必选参数对于短选项也是必选的。-c,--count在每行......
  • 快速排序的三种实现及简单优化(内附代码实现)
    概念​ 先贴一段百度:快速排序采用的是分治思想,即在一个无序的序列中选取一个任意的基准元素key,利用key将待排序的序列分成两部分,前面部分元素均小于或等于基准元素,后面部分均大于或等于基准元素,然后采用递归的方法分别对前后两部分重复上述操作,直到将无序序列排列成有序序列。步......
  • ULID(Universally Unique Lexicographically Sortable Identifier)是一种用于生成全局唯
    ULID(UniversallyUniqueLexicographicallySortableIdentifier)是一种用于生成全局唯一、可按字典序排序的标识符的格式。ULID结合了时间戳和随机数的特性,旨在提供高性能、低碰撞、可排序和易读的标识符。ULID的主要特点包括:全局唯一性:通过结合时间戳和随机数的方式,ULID可以生......
  • Qt表格排序例子
    表格排序是Qt内建支持的,用起来很简单。只需要在QtCreator界面给QTableView或QTableWidget的SortingEnabled属性设置为true就行了。本文将对这两种控件分别展示一下效果和一个自定义的排序例子。一、QTableWidget这个不需要任何代码,只需要设计界面时候启用排序就行了。下面直接......