第一次只有40分,改完就剩20了
#include<bits/stdc++.h>
using namespace std;
int n,p,tot=0,u;
int c[210],head[210],chu[210],ceng[210],maxf=0;
struct line{
int e,w,next;
}l[80010];
void run(int now){
for(int i=head[now];i&&i%2!=0;i=l[i].next){
c[l[i].e]+=(l[i].w*c[now]);
}
}
void add(int from,int to,int value){
tot++;
if(tot%2==1) chu[from]++;
l[tot].e=to;
l[tot].next=head[from];
head[from]=tot;
l[tot].w=value;
}
void walk(int now,int fl){
ceng[now]=fl;
maxf=max(maxf,fl);
for(int i=head[now];i!=0;i=l[i].next){
if(i%2!=0) continue;
walk(l[i].e,fl+1);
}
return;
}
int main(){
int from,to,v;
cin>>n>>p;
for(int i=1;i<=n;i++){
cin>>c[i]>>u;
c[i]-=u;
}
for(int i=1;i<=p;i++){
cin>>from>>to>>v;
add(from,to,v);
add(to,from,v);
}
for(int i=1;i<=n;i++){
if(chu[i]==0){
walk(i,1);
}
}
for(int i=maxf;i>0;i--){
for(int j=1;j<=n;j++){
if(ceng[j]==i&&c[j]>0){
run(j);
}
}
}
for(int i=1;i<=n;i++){
if(ceng[i]==1)
cout<<i<<" "<<c[i]<<endl;
}
}