60pts求助(留言皆大佬)
查看原帖
60pts求助(留言皆大佬)
976798
lsy621楼主2024/7/21 14:34
#include<bits/stdc++.h>
#define N 110
#define M 10010
using namespace std;
int n,p;
int tot,head[N],to[M],nxt[M],val[M];
int indegree[N],outdegree[N];
queue<int>q;
struct rec{
	int c,u;
}node[N];
void add(int x,int y,int z){to[++tot]=y;val[tot]=z;nxt[tot]=head[x];head[x]=tot;}
void topsort(){
	for(int i=1;i<=n;i++)if(!indegree[i])q.push(i);
	while(q.size()){
		int x=q.front();q.pop();
		for(int i=head[x];i;i=nxt[i]){
			if(!--indegree[to[i]])q.push(to[i]);
			if(node[x].c>0)node[to[i]].c+=val[i]*node[x].c;
		}
	}
}
int main(){
	scanf("%d%d",&n,&p);
	for(int i=1;i<=n;i++){
		scanf("%d%d",&node[i].c,&node[i].u);
	}
	for(int i=1,x,y,z;i<=p;i++){
		scanf("%d%d%d",&x,&y,&z);
		add(x,y,z);
		indegree[y]++;
		outdegree[x]++;
	}
	for(int i=1;i<=n;i++)node[i].c-=node[i].u;
	topsort();
	int flag=0;
	for(int i=1;i<=n;i++){
		if(!outdegree[i]&&node[i].c>0){
			printf("%d %d\n",i,node[i].c);
			flag=1;
		}
	}
	if(!flag)printf("NULL");
	return 0;
}
2024/7/21 14:34
加载中...