20求调
查看原帖
20求调
1246509
fbghi楼主2025/1/24 13:22

20分,求调

#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int N=1e5+5;
struct node{
	int x,c,u;
}a[N];
struct node2{
	int j,w;
};
vector<node2> g[N];
queue<int> q;
int ru[N],out[N];
bool vis[N];
int main(){
	int n,m,i,j,k,u,v,w;
	node x;
	cin>>n>>m;
	for(i=1;i<=n;i++)
	{
		cin>>a[i].c>>a[i].u;
		a[i].x=i;
	}
	for(i=1;i<=m;i++)
	{
		cin>>u>>v>>w;
		g[u].push_back({v,w});
		ru[v]++;
		out[u]++;
	}
	for(i=1;i<=n;i++)
	{
		if(ru[i]==0) q.push(i);
	}
	while(q.size())
	{
		x=a[q.front()];
		q.pop();
		x.c-=x.u;
		for(auto i:g[x.x])
		{
			ru[i.j]--;
			if(ru[i.j]==0) q.push(i.j);
			if(x.c>0) a[i.j].c+=i.w*x.c;
		}
		a[x.x]=x;
	}
	for(i=1;i<=n;i++)
	{
		if(!out[i]) cout<<i<<" "<<a[i].c<<endl;
	}
	return 0;
}
2025/1/24 13:22
加载中...