80pts WA#3 求调
查看原帖
80pts WA#3 求调
548741
PanHOVER楼主2023/11/20 17:45
#include<bits/stdc++.h>
using namespace std;

const int MaxN=102;

struct _{
	int to,next,w;
}e[MaxN];
int cnt=1,head[MaxN];
void addedge(int u,int v,int w){
	e[cnt].to=v;
	e[cnt].w=w;
	e[cnt].next=head[u];
	head[u]=cnt++;
}

int tot[MaxN],U[MaxN];
int sum[MaxN],ans[MaxN];
int n,m;

int input[MaxN],output[MaxN];
queue<int> q;

int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>sum[i]>>U[i];
	for(int i=1;i<=m;i++){
		int u,v,w;
		cin>>u>>v>>w;
		addedge(u,v,w);
		input[v]++;output[u]=true;
	}
	for(int i=1;i<=n;i++){
		if(input[i])	sum[i]-=U[i];
		else			q.push(i); 
	}
	while(!q.empty()){
		int k=q.front();
		tot[k]++;
		ans[k]=sum[k];
		q.pop();
		for(int i=head[k];i;i=e[i].next){
			int v=e[i].to;
			sum[v]+=ans[k]*e[i].w;
			tot[v]++;
			if(tot[v]==input[v]&&sum[v]>0)	q.push(v);
		}
	}
	bool flag=true;
	for(int i=1;i<=n;i++)
		if(!output[i]&&ans[i]>0)
			(cout<<i<<" "<<ans[i]<<endl)&&(flag=false);
	if(flag)	cout<<"NULL";
	return 0;
} 
2023/11/20 17:45
加载中...