比赛 图的简单问题 评测结果 AAAAAAA
题目名称 神经网络 最终得分 100
用户昵称 swttc 运行时间 0.003 s
代码语言 C++ 内存使用 0.32 MiB
提交时间 2017-05-14 21:01:45
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
//#include<>
using namespace std;
int n,p,inq[300];
inline int inin()
{
	int yq=0;
	char y=getchar();
	int q=1;
	for(;!isdigit(y);y=getchar()) if(y=='-') q=-1;
	for(;isdigit(y);y=getchar()) yq=(yq*10+y-'0');
	return yq*q;
}
struct nodes
{
	int c,inde,outde,u;
	//nodes(int c,int inde,int outde,int u):c(c),inde(inde),outde(outde),u(u){}
}node[300];
struct edges
{
	int to,w;
};
vector<edges>edge[300];
inline void bfs()
{
	queue<int>qu;
	for(int i=1;i<=n;i++)
	{
		if(node[i].inde==0&&node[i].c>0)
		{
			inq[i]=1;
			qu.push(i);
		}
	}
	while(!qu.empty())
	{
		int u;
		u=qu.front();
		qu.pop();
		inq[u]=0;
		if(node[u].c>0)
		{
			for(int i=0;i<edge[u].size();i++)
			{
				node[edge[u][i].to].c+=(node[u].c*edge[u][i].w);
				node[edge[u][i].to].inde--;
				if(node[edge[u][i].to].inde==0)
				{
					node[edge[u][i].to].c-=node[edge[u][i].to].u;
					qu.push(edge[u][i].to);
					inq[edge[u][i].to]=1;
				}
			}
		}
		
	}
}
int main()
{
	freopen("sjwl.in","r",stdin);
	freopen("sjwl.out","w",stdout);
	scanf("%d%d",&n,&p);
	for(int i=1;i<=n;i++)
	{
		node[i].c=inin();
		node[i].u=inin();
		//scanf("%d%d",&node[i].c,&node[i].u);
	}
	for(int i=1;i<=p;i++)
	{
		int b;
		edges a;
		b=inin();
		a.to=inin();
		a.w=inin();
		//scanf("%d%d%d",&b,&a.to,&a.w);
		edge[b].push_back(a);
		node[b].outde++;
		node[a.to].inde++;
	}
	bfs();
	int t=0;
	for(int i=1;i<=n;i++)
	{
		if(node[i].outde==0&&node[i].c>0)
		{
			printf("%d %d\n",i,node[i].c);
			t++;
		}
	}
	if(t==0) printf("NULL");
	return 0;
}