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;
}