记录编号 |
115364 |
评测结果 |
AAAAAAA |
题目名称 |
[NOIP 2003]神经网络 |
最终得分 |
100 |
用户昵称 |
任杰 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.005 s |
提交时间 |
2014-08-18 12:37:45 |
内存使用 |
0.63 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
#define MAX_N 201
int n,p;
int status[MAX_N];
int u[MAX_N];
int in[MAX_N];
int out[MAX_N];
int G[MAX_N][MAX_N];
int W[MAX_N][MAX_N];
int stack[MAX_N];
int top;
int main()
{
freopen("sjwl.in","r",stdin);
freopen("sjwl.out","w",stdout);
cin>>n>>p;
for(int i=0;i<n;i++)
cin>>status[i]>>u[i];
for(int i=0;i<p;i++)
{
int a,b,v;
cin>>a>>b>>v;
a--;b--;
G[a][b]=1;
W[a][b]=v;
in[b]++;
out[a]++;
}
top=-1;
for(int i=0;i<n;i++)
{
if(!in[i] && status[i]>0)
{
stack[++top]=i;
}
}
while(top!=-1)
{
int v=stack[top--];
for(int i=0;i<n;i++)
{
if(G[v][i])
{
status[i]+=W[v][i]*status[v];
in[i]--;
if(in[i]==0)
{
status[i]-=u[i];
if(status[i]>0) stack[++top]=i;
}
}
}
}
bool ok=true;
for(int i=0;i<n;i++)
{
if(!out[i] && status[i]>0)
{
cout<<i+1<<" "<<status[i]<<endl;;
ok=false;
}
}
if(ok) cout<<"NULL"<<endl;
return 0;
}