模板拓扑(或许)
#include<bits/stdc++.h>
using namespace std;
struct edge {int to,val,nxt;
} e[10005];
struct answer {int id,val;
} ans[105];
int h,m,n,t,u,v,w,U,c[105],hd[105],out[105],vis[105];
queue <int> q;
int cnt=0,flag=0;
inline bool cmp(answer aa,answer bb){return aa.id<bb.id;
}
inline void build(int u,int v,int w){cnt++;e[cnt].to=v;e[cnt].val=w;e[cnt].nxt=hd[u];hd[u]=cnt;
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m;for(int i=1;i<=n;i++){vis[i]=out[i]=0;cin>>c[i]>>U;if(c[i]>0)q.push(i),vis[i]=1;else c[i]-=U;}for(int i=1;i<=m;i++){cin>>u>>v>>w;build(u,v,w);out[u]=1;}while(!q.empty()){h=q.front();q.pop();if(c[h]<=0)continue;for(int i=hd[h];i;i=e[i].nxt){t=e[i].to;c[t]+=e[i].val*c[h];if(!vis[t]){q.push(t);vis[t]=1;}}}for(int i=1;i<=n;i++)if(!out[i]&&c[i]>0){cout<<i<<' '<<c[i]<<'\n';flag=1;}if(!flag){cout<<"NULL";return 0;}return 0;
}