luogu P1038 神经网络
这道题的题面
真的令人头大
而且说的不清楚
有很多坑点
首先,输入层神经元的阈(这个字读yu!!!不是阀)值不需要减掉
其次,最后一层不能清掉信号强度
再就是,最后会有负数所以判断的是c是否>0
放在任务计划里挺久,上周才切掉
一道裸的拓扑排序吧
#include<cstdio>
#define sev en
using namespace std;
#define N 110
int c[N],rd[N],cd[N],u[N];
int q[2000010],dis[N][N];
int main() {
// printf("NULL");
// return 0;
int n,m;
scanf("%d%d",&n,&m);
for(int i = 1; i <= n; i++) {
// int u;
scanf("%d%d",&c[i],&u[i]);
if(!c[i])
c[i] -= u[i];
}
for(int i = 1; i <= m; i++) {
int from,to,w;
scanf("%d%d",&from,&to);
scanf("%d",&dis[from][to]);
// dis[u][v] = w;
rd[to]++;
cd[from]++;
}
int h = 0,t = 1;
for(int i = 1; i <= n; i++)
if(rd[i] == 0)
q[++t] = i;
while(h < t) {
h++;
if(c[q[h]] > 0) {
for(int i = 1; i <= n; i++)
if(dis[q[h]][i] != 0) {
c[i] += dis[q[h]][i] * c[q[h]];
q[++t] = i;
}
if(cd[q[h]] != 0)
c[q[h]] = 0;
}
}
bool f = 0;
for(int i = 1; i <= n; i++)
if(c[i] > 0)
printf("%d %d\n",i,c[i]),f = 1;
if(f == 0)
printf("NULL");
return 0;
}
(又水了一篇blog23333