记录编号 115364 评测结果 AAAAAAA
题目名称 [NOIP 2003]神经网络 最终得分 100
用户昵称 Gravatar任杰 是否通过 通过
代码语言 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;
}