生活随笔
收集整理的這篇文章主要介紹了
P1038 神经网络(拓扑排序)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
https://www.luogu.org/problem/P1038
題目背景
人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural NetworkArtificialNeuralNetwork)是一種新興的具有自我學(xué)習(xí)能力的計算系統(tǒng),在模式識別、函數(shù)逼近及貸款風(fēng)險評估等諸多領(lǐng)域有廣泛的應(yīng)用。對神經(jīng)網(wǎng)絡(luò)的研究一直是當(dāng)今的熱門方向,蘭蘭同學(xué)在自學(xué)了一本神經(jīng)網(wǎng)絡(luò)的入門書籍后,提出了一個簡化模型,他希望你能幫助他用程序檢驗這個神經(jīng)網(wǎng)絡(luò)模型的實用性。
題目描述
在蘭蘭的模型中,神經(jīng)網(wǎng)絡(luò)就是一張有向圖,圖中的節(jié)點稱為神經(jīng)元,而且兩個神經(jīng)元之間至多有一條邊相連,下圖是一個神經(jīng)元的例子:
輸入輸出樣例
輸入 #1 復(fù)制
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
輸出 #1 復(fù)制
3 1
4 1
5 1
根據(jù)題意:
輸入層—>中間層---->輸出層
我們可以發(fā)現(xiàn)只要有出度的都不屬于輸出層。
也很明顯是一個拓?fù)渑判颉?br /> 本題只有三層,我分別給前兩層標(biāo)號1,2,
對于非輸入層的點根據(jù)題目中的公式要減掉U,
在輸入的時候我們就可以根據(jù)題意判斷出非輸入層的點,
然后讓它的c先減掉u,這樣我們后面計算C,只需要管求和部分
#include <bits/stdc++.h>
using namespace std
;
struct Node
{int c
,u
;int no
;int in
,index
;Node(){in
= 0;index
= 0;}Node(int id
,int i
):index(id
),in(i
){}bool operator
<(const Node
&x
)const{return in
> x
.in
;}
} a
[105];
struct Edge
{int to
;int val
;Edge(int t
,int v
):to(t
),val(v
){}
};
vector
<Edge
>vec
[105];
int main()
{int n
,p
;scanf("%d%d",&n
,&p
);for(int i
= 1; i
<= n
; i
++){scanf("%d%d",&a
[i
].c
,&a
[i
].u
);a
[i
].c
? a
[i
].no
= 1 : a
[i
].c
-= a
[i
].u
;}while(p
--){int x
,y
,v
;scanf("%d%d%d",&x
,&y
,&v
);if(a
[x
].no
!= 1) a
[x
].no
= 2;vec
[x
].push_back(Edge(y
,v
));a
[y
].in
++;}priority_queue
<Node
>q
;for(int i
= 1; i
<= n
; i
++){if(a
[i
].no
== 1){q
.push(Node(i
,0));}}while(!q
.empty()){while(!q
.empty()){Node k
= q
.top();q
.pop();int cnt
= vec
[k
.index
].size();for(int i
= 0; i
< cnt
; i
++){int t
= vec
[k
.index
][i
].to
;int v
= vec
[k
.index
][i
].val
;if(a
[k
.index
].c
> 0)a
[t
].c
+= a
[k
.index
].c
* v
;a
[t
].in
--;}if(cnt
) a
[k
.index
].in
= -1;}for(int i
= 1; i
<= n
; i
++){if(a
[i
].no
== 2 && a
[i
].in
== 0){q
.push(Node(i
,a
[i
].in
));}}}int flag
= 0;for(int i
= 1; i
<= n
; i
++){if(a
[i
].in
!= -1&&a
[i
].c
> 0){flag
= 1;printf("%d %d\n",i
,a
[i
].c
);}}if(!flag
) printf("NULL\n");return 0;
}
總結(jié)
以上是生活随笔為你收集整理的P1038 神经网络(拓扑排序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。