记录编号 |
152427 |
评测结果 |
AAAAAAA |
题目名称 |
[NOIP 2003]神经网络 |
最终得分 |
100 |
用户昵称 |
albertxwz |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.003 s |
提交时间 |
2015-03-14 11:41:09 |
内存使用 |
0.52 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
bool side[205][205],dian[205];
int w[205][205],u[205],c[205],indu[205],outdu[205],top[205],n,p;
int main(){
freopen("sjwl.in","r",stdin);
freopen("sjwl.out","w",stdout);
memset(dian,true,sizeof(dian));
memset(side,false,sizeof(side));
memset(indu,0,sizeof(indu));
memset(outdu,0,sizeof(outdu));
cin>>n>>p;
for(int i=1;i<=n;i++)scanf("%d%d",&c[i],&u[i]);
while(p--){
int x,y;
scanf("%d%d",&x,&y);
scanf("%d",&w[x][y]);
indu[y]++;
outdu[x]++;
side[x][y]=true;
}
for(int i=0;i<n;i++){
int k;
for(int j=1;j<=n;j++)if(indu[j]==0&&dian[j]){
dian[j]=false;
k=j;
break;
}
top[i]=k;
for(int j=1;j<=n;j++)if(side[k][j])indu[j]--;
}
for(int i=0;i<n;i++){
if(c[top[i]])continue;
c[top[i]]=-u[top[i]];
for(int j=0;j<i;j++)if(side[top[j]][top[i]]&&c[top[j]]>0)c[top[i]]+=w[top[j]][top[i]]*c[top[j]];
}
bool flag=true;
for(int i=1;i<=n;i++)
if(c[i]>0&&outdu[i]==0){printf("%d %d\n",i,c[i]); flag=false;}
if(flag)printf("NULL\n");
return 0;
}