1. 程式人生 > >洛谷P1038 神經網路

洛谷P1038 神經網路

題目

題解:

拓撲排序,難度挺低,但是細節很多。
其中一個注意點:c[i]即便是負數,也要進隊,不然有些點入度始終大於0,更新不了

標程:

#include<bits/stdc++.h>
using namespace std;
struct kk{
    int x,y;
}a[103];
struct node{
    int to,ne,w;
}e[10003];
int n,m,i,j,x,y,z,num,out[103],in[103],u,q[103],c[103],U[103],head[103],tot,h,t,v;
void add(int x,int y,int z){
    e[++tot]=(node){y,head[x],z};
    head[x]=tot;
}
int
main(){ scanf("%d%d",&n,&m); for (i=1;i<=n;i++){ scanf("%d%d",&c[i],&U[i]); if (c[i]) q[++t]=i; } for (i=1;i<=m;i++){ scanf("%d%d%d",&x,&y,&z); in[y]++;out[x]++; add(x,y,z); } while (h<t){ u=q[++h]; for
(i=head[u];i;i=e[i].ne){ v=e[i].to; if (c[u]>0) c[v]+=e[i].w*c[u]; in[v]--; if (!in[v]) c[v]-=U[v],q[++t]=v; } } for (i=1;i<=n;i++) if (!out[i] && c[i]>0) num++,printf("%d %d\n",i,c[i]);//出度為0的就是輸出層 if (!num) printf
("NULL"); }