为啥我在代码里写了freopen也能拿20分? 戳这里
#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
int n,p,cnt;
int edge[maxn][maxn],in[maxn],out[maxn];
int c[maxn],u[maxn];
int vis[maxn];
int main(){
cin>>n>>p;
for(int i=1;i<=n;++i){
cin>>c[i]>>u[i];
if(c[i]==0)
c[i]-=u[i];
}
for(int i=1;i<=p;++i){
int x,y,z;
cin>>x>>y>>z;
edge[x][y]=z;
++in[y];
++out[x];
}
while(cnt!=n){
for(int i=1;i<=n;++i)
if(vis[i]==in[i]){
++cnt;
vis[i]=-1;
for(int j=1;j<=n;++j)
if(edge[i][j]!=0){
c[j]+=edge[i][j]*c[i];
++vis[j];
}
}
}
bool flag=0;
for(int i=1;i<=n;++i)
if(out[i]==0)
if(c[i]>0){
cout<<i<<' '<<c[i]<<'\n';
flag=1;
}
if(!flag)
cout<<"NULL";
}