注意如果是
- \(if(c[i])\)
这条语句并没有说明c[i]不为负数,所以说最好老老实实的写
#include<cstdio>
#define _ 0
using namespace std;
int c[105],u[105];
struct ben
{
int i,j,w;
}a[10005];
int h[10005],in[105],out[105],vis[105];
int main()
{
int n,p;
scanf("%d%d",&n,&p);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&c[i],&u[i]);
if(c[i]>0)u[i]=-1;
}
int cnt=0;
for(int k=1;k<=p;k++)
{
int i,j,w;
scanf("%d%d%d",&i,&j,&w);
a[++cnt]=(ben){j,w,h[i]};//终点,权值,以及起点所对应的边记录的编号
h[i]=cnt;
in[j]++;
out[i]++;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(in[j]==0&&vis[j]==0)
{
vis[j]=1;
if(u[j]!=-1)c[j]-=u[j];
for(int k=h[j];k>0;k=a[k].w)
{
if(c[j]>0)
{
c[a[k].i]+=c[j]*a[k].j;
}
in[a[k].i]--;
}
break;
}
}
}
int flag=0;
for(int i=1;i<=n;i++)
{
if(out[i]==0&&c[i]>0)
{
flag=1;
break;
}
}
if(flag==1)
{
for(int i=1;i<=n;i++)
{
if(out[i]==0&&c[i]>0)
{
printf("%d %d\n",i,c[i]);
}
}
}
else
{
printf("NULL\n");
}
return 0^_^0;
}