luogu1038神經網路

2021-07-23 23:57:05 字數 2121 閱讀 9592

題目背景

人工神經網路(artificial neural network)是一種新興的具有自我學習能力的計算系統,在模式識別、函式逼近及貸款風險評估等諸多領域有廣泛的應用。對神經網路的研究一直是當今的熱門方向,蘭蘭同學在自學了一本神經網路的入門書籍後,提出了乙個簡化模型,他希望你能幫助他用程式檢驗這個神經網路模型的實用性。

題目描述

在蘭蘭的模型中,神經網路就是一張有向圖,圖中的節點稱為神經元,而且兩個神經元之間至多有一條邊相連,下圖是乙個神經元的例子:

神經元〔編號為1)

圖中,x1―x3是資訊輸入渠道,y1-y2是資訊輸出渠道,c1表示神經元目前的狀態,ui是閾值,可視為神經元的乙個內在引數。

神經元按一定的順序排列,構成整個神經網路。在蘭蘭的模型之中,神經網路中的神經無分為幾層;稱為輸入層、輸出層,和若干個中間層。每層神經元只向下一層的神經元輸出資訊,只從上一層神經元接受資訊。下圖是乙個簡單的三層神經網路的例子。

蘭蘭規定,ci服從公式:(其中n是網路中所有神經元的數目)

公式中的wji(可能為負值)表示連線j號神經元和 i號神經元的邊的權值。當 ci大於0時,該神經元處於興奮狀態,否則就處於平靜狀態。當神經元處於興奮狀態時,下一秒它會向其他神經元傳送訊號,訊號的強度為ci。

如此.在輸入層神經元被激發之後,整個網路系統就在資訊傳輸的推動下進行運作。現在,給定乙個神經網路,及當前輸入層神經元的狀態(ci),要求你的程式運算出最後網路輸出層的狀態。

輸入輸出格式

輸入格式:

輸入檔案第一行是兩個整數n(1≤n≤100)和p。接下來n行,每行兩個整數,第i+1行是神經元i最初狀態和其閾值(ui),非輸入層的神經元開始時狀態必然為0。再下面p行,每行由兩個整數i,j及乙個整數wij,表示連線神經元i、j的邊權值為wij。

輸出格式:

輸出檔案包含若干行,每行有兩個整數,分別對應乙個神經元的編號,及其最後的狀態,兩個整數間以空格分隔。僅輸出最後狀態大於零的輸出層神經元狀態,並且按照編號由小到大順序輸出!

若輸出層的神經元最後狀態均為 0,則輸出 null。

03年的t1,感覺坑的難度大於題目本身;

首先要注意對於題目本身的理解,

1.有向圖,以及狀態的定義是由上乙個點的狀態決定的,但是對於所謂的輸入層則不需要考慮所謂的閾值;

2.注意一點那個要弄懂題目中各個變數的含義是什麼;

3.注意特判乙個點的情況,(可能是我寫程式魯棒性不強……);

4.注意輸出時要按編號輸出;

5.每個點只有活著(c>0)時才能向下傳輸;

要是能夠看懂題目的話,演算法應該不難想到,可以在拓撲排序上加一點改動,實質上應該算是一道模擬題;但對於各個細節的處理還是要注意;具體在**中說明;

#include

#include

#include

#include

#include

using

namespace

std;

queue

s;vector

ans;

const

int maxn=400;

int n,p,node[maxn],to[maxn],nxt[maxn],len[maxn],tot=0;

int ru[maxn],zhuangtai[maxn],yuzhi[maxn],chu[maxn];

void add(int x,int y,int z)

void tuopu()

else}}

}}int main()

for(int i=1;i<=n;i++)

if(n==1)//只有乙個點的特判,貌似可以避過去,,,,,蒟蒻水平不夠

tuopu();

sort(ans.begin(),ans.end());

//保證答案有序

if(ans.size())

else

printf("null");

return

0;}

luogu1038 神經網路

人工神經網路 artificial neural network 是一種新興的具有自我學習能力的計算系統,在模式識別 函式逼近及貸款風險評估等諸多領域有廣泛的應用。對神經網路的研究一直是當今的熱門方向,蘭蘭同學在自學了一本神經網路的入門書籍後,提出了乙個簡化模型,他希望你能幫助他用程式檢驗這個神經網...

Luogu1038 神經網路 (拓撲排序)

拓撲排序,裸的,水的。第一發 題讀錯,輸出錯,輸入錯,到處錯 longrightarrow 40pts excuse me 第二發 漏了輸入層特判 longrightarrow 60pts 我操我自己 第三發 a 得毫無快感,毫無尊嚴,看著 普及 提高 沉默良久 include include in...

1038神經網路

這道題也可以用佇列來做,但比較麻煩。沒辦法,蒟蒻一枚。首先,將起點 ci 1的點 放入佇列之中。當head tail時,head,將隊首的點 team head 展開去找他的兒子節點。如果兒子節點沒放入佇列則放入。l代表本層最後乙個點在team 中的序號,l2用於記錄修改前的l,便於輸出。當head...