1>神经网络
绿题
为什么用拓扑?
1)必备条件:DAG
2)本题的公式上,显示需要计算出能连接到本点的,全部的边值*点值
故而当我开始推这个点时,他的所有先驱点的状态全部都要求完
这只能是topo_sort
#include<cstdio> #include<cstdlib> #include<queue> #include<vector> using namespace std; int n,m; const int N=103; int c[N],in[N],sz[N]; struct node { int v,w; node(int vv,int ww) { v=vv,w=ww; } node(){} }; vector <node > g[N]; queue <int > q; void topo_sort() { while(!q.empty()) { int t=q.front();q.pop(); sz[t]=g[t].size() ; for(int i=0;i<sz[t];i++) { node v=g[t][i]; if(c[t]>0) c[v.v ]+=c[t]*v.w ; if(--in[v.v ]==0) q.push(v.v ); } } } int main() { scanf("%d%d",&n,&m); int x; for(int i=1;i<=n;i++) { scanf("%d%d",&c[i],&x); if(c[i]>0) q.push(i); else c[i]-=x; } int u,v,w; while(m--) { scanf("%d%d%d",&u,&v,&w); g[u].push_back(node(v,w)); in[v]++; } topo_sort(); bool fail=true; for(int i=1;i<=n;i++) if(!sz[i] && c[i]>0) { printf("%d %d\n",i,c[i]); fail=false; } if(fail) printf("NULL\n"); return 0; }
2>校园网络