记录编号 406812 评测结果 AAAAAAA
题目名称 [NOIP 2003]神经网络 最终得分 100
用户昵称 Gravatarliuyu 是否通过 通过
代码语言 C++ 运行时间 0.002 s
提交时间 2017-05-19 21:43:12 内存使用 0.48 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=203;
int n,p,vis[maxn],x,y,ww,w[maxn][maxn],c[maxn],u[maxn];
queue<int>q;
vector<int>b[maxn];
vector<int>ans;
void bfs()
{
	while(!q.empty())
	{
	  int v=q.front();
	  q.pop();
	  if(c[v]<=0)continue;
	  for(int i=0;i<b[v].size();i++)
	  {
	  	c[b[v][i]]+=w[v][b[v][i]]*c[v];
	  	if(!vis[b[v][i]]){c[b[v][i]]-=u[b[v][i]];q.push(b[v][i]);vis[b[v][i]]=1;}
	  }
	  if(b[v].empty())ans.push_back(v);
	}
}
void print()
{
	int a=0;
	sort(ans.begin(),ans.end());
	for(int i=0;i<ans.size();i++)
	  if(c[ans[i]]>0){printf("%d %d\n",ans[i],c[ans[i]]);a=1;}
	if(!a)printf("NULL");
}
int main()
{
	freopen("sjwl.in","r",stdin);
	freopen("sjwl.out","w",stdout);
	scanf("%d%d",&n,&p);
	for(int i=1;i<=n;i++)
	{
	  scanf("%d%d",&c[i],&u[i]);
	  if(c[i]!=0)q.push(i);
	}
	for(int i=1;i<=p;i++)
	{
	  scanf("%d%d%d",&x,&y,&ww);
	  b[x].push_back(y);
	  w[x][y]=ww;
	}
	bfs();
	print();
	return 0;
}