日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P1038 神经网络(拓扑排序)

發(fā)布時間:2024/9/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)//題意,只需加大于0的部分a[t].c += a[k.index].c * v;a[t].in--;}//需要特判:對于一個沒有出度的輸入層的點,它自身也是屬于輸出層if(cnt) a[k.index].in = -1;//有出度的去掉這個點,置為-1來標(biāo)記}for(int i = 1; i <= n; i++){if(a[i].no == 2 && a[i].in == 0)//此時入度為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)//根據(jù)題意打印{flag = 1;printf("%d %d\n",i,a[i].c);}}if(!flag) printf("NULL\n");return 0; }/* 4 4 1 0 0 1 0 1 0 1 1 2 1 1 3 1 2 3 1 3 4 15 8 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 5 1 5 4 11 0 1 1 */

總結(jié)

以上是生活随笔為你收集整理的P1038 神经网络(拓扑排序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。