记录编号 486647 评测结果 AAAAAAA
题目名称 [NOIP 2003]神经网络 最终得分 100
用户昵称 Gravatar+1s 是否通过 通过
代码语言 C++ 运行时间 0.006 s
提交时间 2018-02-07 14:02:56 内存使用 0.40 MiB
显示代码纯文本
#include<cstdio>
#include<queue>
#include<algorithm>
long long n,p,arc[222][222],idg[222],odg[222],f=0,ff[222];
struct {
	long long c,u;
} u[222];
struct _ {
	long long idx,c;
} re[222];
std::priority_queue<long long,std::vector<long long>,std::greater<long long> > q;
bool cmp(struct _ a,struct _ b) {
	return a.idx<b.idx;
}
int main() {
	freopen("sjwl.in","r",stdin);
	freopen("sjwl.out","w",stdout);
	scanf("%lld %lld",&n,&p);
	for(int i=1; i<=n; i++)scanf("%lld %lld",&u[i].c,&u[i].u);
	for(int i=1; i<=n; i++)for(int j=1; j<=n; j++)arc[i][j]=2100000000;
	for(int i=1; i<=p; i++) {
		long long x,y,w;
		scanf("%lld %lld %lld",&x,&y,&w);
		arc[x][y]=w;
		idg[y]++;
		odg[x]++;
	}
	for(int i=1; i<=n; i++)
		if(idg[i]==0) {
			q.push(i);
			u[i].u=0;
		}
	while(!q.empty()) {
		long long tp=q.top();
		q.pop();
		u[tp].c-=u[tp].u;
		if(odg[tp]==0&&u[tp].c>0) {
			re[++f].idx=tp;
			re[f].c=u[tp].c;
			continue;
		}
		for(int i=1; i<=n; i++)
			if(arc[tp][i]!=2100000000) {
				if(u[tp].c>0)u[i].c+=arc[tp][i]*u[tp].c;
				if(--idg[i]==0)q.push(i);
			}

	}
	if(f==0)printf("NULL");
	else {
		std::sort(re+1,re+1+f,cmp);
		for(int i=1; i<=f; i++)printf("%lld %lld\n",re[i].idx,re[i].c);
	}
	return 0;
}