码迷,mamicode.com
首页 > 其他好文 > 详细

codevs 1088 神经网络

时间:2016-07-02 13:11:09      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

/*
这题目简直没谁了 
我只想说 codevs上传题目的 专业素养在哪里 最起码别有错别字啊
0.0
咳咳 说正事
应该是考察拓扑排序的 
统计出入度 然后依次处理每个入度为0的点 当然ci为0的可以不必要统计了 因为他不传递刺激 
好好理解一下给出的公式 无非就是所有传入i的刺激与ci乘积累加
累加完事之后-ui
最后输出 出度为0的  
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 110
using namespace std;
int n,m,c[maxn],u[maxn],head[maxn],num;
int in[maxn],out[maxn];
struct node
{
    int u,v,pre,t;
}e[maxn*maxn];
void Add(int from,int to,int dis)
{
    num++;
    e[num].u=from;
    e[num].v=to;
    e[num].t=dis;
    e[num].pre=head[from];
    head[from]=num;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
      scanf("%d%d",&c[i],&u[i]);
    for(int i=1;i<=m;i++)
      {
          int u,v,t;
          scanf("%d%d%d",&u,&v,&t);
          Add(u,v,t);in[v]++;out[u]++;
      }
    while(1)
      {
          int k=n+1;
          for(int i=1;i<=n;i++)
            if(in[i]==0&&c[i]>0)
              {
                in[i]--;k=i;break;
            }
        if(k==n+1)break;
        for(int i=head[k];i;i=e[i].pre)
          {
              in[e[i].v]--;
              c[e[i].v]+=e[i].t*c[k];
              if(in[e[i].v]==0)c[e[i].v]-=u[e[i].v];
          }
      }
    int falg=0;
    for(int i=1;i<=n;i++)
      if(out[i]==0&&c[i]>0)
        {
          falg=1;
          printf("%d %d\n",i,c[i]);
        }
    if(falg==0)printf("NULL");
    return 0;
}

 

codevs 1088 神经网络

标签:

原文地址:http://www.cnblogs.com/yanlifneg/p/5635090.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!