題目背景
人工神經網路(artificial neural networkartificialneuralnetwork)是一種新興的具有自我學習能力的計算系統,在模式識別、函式逼近及貸款風險評估等諸多領域有廣泛的應用。對神經網路的研究一直是當今的熱門方向,蘭蘭同學在自學了一本神經網路的入門書籍後,提出了乙個簡化模型,他希望你能幫助他用程式檢驗這個神經網路模型的實用性。
題目描述
在蘭蘭的模型中,神經網路就是一張有向圖,圖中的節點稱為神經元,而且兩個神經元之間至多有一條邊相連,下圖是乙個神經元的例子:
輸入輸出樣例
輸入 #1 複製
5 6
1 01 0
0 10 1
0 11 3 1
1 4 1
1 5 1
2 3 1
2 4 1
2 5 1
輸出 #1 複製
3 1
4 15 1
根據題意:
輸入層—>中間層---->輸出層
我們可以發現只要有出度的都不屬於輸出層。
也很明顯是乙個拓撲排序。
本題只有三層,我分別給前兩層標號1,2,
對於非輸入層的點根據題目中的公式要減掉u,
在輸入的時候我們就可以根據題意判斷出非輸入層的點,
然後讓它的c先減掉u,這樣我們後面計算c,只需要管求和部分
#include
using namespace std;
struct node
node
(int id,
int i)
:index
(id),in
(i) bool operator<
(const node&x)
const
} a[
105]
;struct edge};
vectorvec[
105]
;int
main()
while
(p--
) priority_queueq;
for(
int i =
1; i <= n; i++)}
while
(!q.
empty()
)//需要特判:對於乙個沒有出度的輸入層的點,它自身也是屬於輸出層
if(cnt) a[k.index]
.in =-1
;//有出度的去掉這個點,置為-1來標記
}for
(int i =
1; i <= n; i++)}
}int flag =0;
for(
int i =
1; i <= n; i++)}
if(!flag)
printf
("null\n");
return0;
}/*4 41 0
0 10 1
0 11 2 1
1 3 1
2 3 1
3 4 1
5 81 0
1 00 1
0 10 1
1 3 1
1 4 1
1 5 1
2 3 1
2 4 1
2 5 1
3 5 1
5 4 1
1 01 1
*/
P1038 神經網路 拓撲排序
傳送門 思路 一道拓撲排序經典題,此題要求算出最後所有的結點c i c i c i 一開始c i 0c i 0 c i 0的點被認為是輸入層,即入度為0的點。然後用拓撲排序對相鄰結點不斷操作即可,輸出層即出度為0的點。最後從1 11到n nn遍歷判斷該結點是否滿足 ou t i c i 0 out ...
P1038 神經網路 拓撲
人工神經網路 artificial neural network 是一種新興的具有自我學習能力的計算系統,在模式識別 函式逼近及貸款風險評估等諸多領域有廣泛的應用。對神經網路的研究一直是當今的熱門方向,蘭蘭同學在自學了一本神經網路的入門書籍後,提出了乙個簡化模型,他希望你能幫助他用程式檢驗這個神經網...
洛谷 P1038 神經網路(拓撲排序)
題目鏈結 題目意思比較明確,就是簡單的拓撲排序,這裡寫幾個圖操作需要注意的坑點。這裡的邊權值可能為正 負數,還可能為0,所以判斷兩個點之間是否有路徑時要注意。include using namespace std int ui 110 ci 110 wi 110 110 n,p,inedge 110...