原题地址:here
#include<iostream>
#include<queue>
using namespace std;
int n,p,a,b,w,u;
struct po{
int in,c;
vector <int> way;vector <int> f;
}q[110];
queue <int> l;
queue <int> ans;
void move(int i){
if(q[i].c>0){
for(int j=0;j<(int)q[i].way.size();j++){
q[q[i].way[j]].c+=q[i].f[j]*q[i].c;q[q[i].way[j]].in--;
}
}
}
int main(){
cin>>n>>p;
for(int i=1;i<=n;i++) {
scanf("%d%d",&q[i].c,&u);
if(q[i].c==0)q[i].c-=u;
q[i].in=0;
l.push(i);
}
for(int i=0;i<p;i++){
scanf("%d%d%d",&a,&b,&w);
q[b].in++;
q[a].way.push_back(b);q[a].f.push_back(w);
}
for(int i=1;i<=n;i++) if(q[i].way.empty()) ans.push(i);
while(!l.empty()){
if(q[l.front()].in==0)move(l.front());
else l.push(l.front());
l.pop();
}
bool ap=false;
for(int i=(int)ans.size();i>0;i--){
if(q[ans.front()].c>0){
ap=true;cout<<ans.front()<<" "<<q[ans.front()].c<<endl;
}
ans.pop();
}
if(!ap)cout<<"NULL";
return 0;
}
60tps,TLE#3,#4 救救救!