60pts求助
查看原帖
60pts求助
542698
封禁用户楼主2023/8/7 17:35
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct edge
{
	int to,num,nxt;
}e[30005];
struct Queue
{
	int x;
	friend bool operator<(Queue a,Queue b)
	{
		return a.x>b.x;
	}
};
queue<int>q;
priority_queue<Queue>ans;
int head[30005],cnt,c[30005],u[30005],vis[30005],in[30005],out[30005];
void add(int u,int v,int w)
{
	e[++cnt]={v,w,head[u]};
	head[u]=cnt;
}
signed main()
{
	int n,p;
	cin>>n>>p;
	for(int i=1;i<=n;i++)
	{
		cin>>c[i]>>u[i];
		if(c[i]>0)q.push(i),vis[i]=1;
		c[i]-=u[i];
	}
	for(int i=1;i<=p;i++)
    {
        int u,v,w;
        cin>>u>>v>>w;
        add(u,v,w);
        in[v]++;
        out[u]++;
    }
    while(!q.empty())
    {
    	int x=q.front();
    	q.pop();
    	vis[x]=0;
    	if(c[x]<0)continue;
		for(int i=head[x];i;i=e[i].nxt)
		{
			int y=e[i].to;
			if(vis[y]==0)
			{
				c[y]+=e[i].num*c[x];
				q.push(y);
				vis[y]=1;
			}
			else c[y]+=e[i].num*c[x];
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(out[i]==0&&c[i]>0)
		{
			Queue temp;
			temp.x=i;
			ans.push(temp); 
		}
	}
	if(ans.empty())
	{
		cout<<"NULL";
		return 0;
	}
	while(!ans.empty())
	{
		Queue x=ans.top();
		ans.pop();
		cout<<x.x<<" "<<c[x.x]<<endl;
	}
}
2023/8/7 17:35
加载中...