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

vijos1105 神经网络

时间:2017-06-10 19:29:53      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:sdi   拓扑   vijos   space   push   clu   bsp   getc   ace   

  主要就是一个拓扑排序,每次找到一个入度为零的点,然后更新别的点的C值。

#include<cstdio>
#include<cctype>
#include<vector>
using namespace std;
inline int read(){
    char c; while(c=getchar(),!isdigit(c) && c!=-);
    int x=0,y=1; if(c==-) y=-1; else x=c-0;
    while(c=getchar(),isdigit(c)) x=x*10+c-0; return x*y;
}
struct edge{
    int to,dis;
    edge(int to,int dis):to(to),dis(dis){}
};
int q[201],C[201],g[201],U[201],h,vis[201],t,ppp[201];
vector<edge> e[201];
int main(){
    int n=read(),m=read();
    for(int i=1;i<=n;i++){
        C[i]=read(); U[i]=read();
        if(C[i]) ppp[i]=1;
    }
    for(int i=1;i<=m;i+=1){
        int u=read(),v=read(),dis=read();
        e[u].push_back(edge(v,dis));
        g[v]++;
    }
    for(int i=1;i<=n;i+=1){
        int o=0;
        for(int j=1;j<=n;j+=1)
            if(g[j]==0 && !vis[j]){o=j; break;}
        vis[o]=1;
        if(!ppp[o]) C[o]-=U[o];
        if(C[o]>0)
        for(int j=0;j<e[o].size();j+=1)
            g[e[o][j].to]--,C[e[o][j].to]+=C[o]*e[o][j].dis;
    }
    int tot=0;
    for(int i=1;i<=n;i+=1)
        if(e[i].empty() && C[i]>0) tot+=1,printf("%d %d\n",i,C[i]);
    if(tot==0) printf("NULL");
    return 0;
}

 

vijos1105 神经网络

标签:sdi   拓扑   vijos   space   push   clu   bsp   getc   ace   

原文地址:http://www.cnblogs.com/yuao/p/6979507.html

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