rt
调试的时候拓扑结束c数组的值是1,1,0,1,1
实在看不出来了,大佬们帮忙看看吧qwq
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
int n,p,c[200],to,cnt,head[200];
bool outputpoint[200],vis[200];
struct e_dge{
int w,to,next;
}edge[200];
queue<int> q;
void add(int u,int v,int w)
{
edge[cnt].to = v;
edge[cnt].w = w;
edge[cnt].next = head[u];
head[u] = cnt++;
}
int main()
{
cin>>n>>p;
for(int i=1;i<=n;i++)
{
int t;
cin>>c[i]>>t;
if(c[i]>0)
{
q.push(i);
vis[i]=true;
}
else
c[i]-=t;
}
for(int i=1;i<=p;i++)
{
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
outputpoint[u]=true;
}
while(!q.empty())
{
int f;
f=q.front();
q.pop();
if(c[f]<=0)
continue;
for(int i=head[f];i;i=edge[i].next)
{
to=edge[i].to;
c[to]+=c[f]*edge[i].w;
if(!vis[to])
{
q.push(to);
vis[to]=true;
}
}
}
bool l=true;
for(int i=1;i<=n;i++)
{
if(!outputpoint[i]&&c[i]>0)
{
cout<<i<<" "<<c[i]<<endl;
l=false;
}
}
if(l)
cout<<"NULL";
return 0;
}