神经网络 洛谷 - P1038
模板拓扑(或许)
#include<bits/stdc++.h>
using namespace std;
struct edge {
int to,val,nxt;
} e[10005];
struct answer {
int id,val;
} ans[105];
int h,m,n,t,u,v,w,U,c[105],hd[105],out[105],vis[105];
queue <int> q;
int cnt=0,flag=0;
inline bool cmp(answer aa,answer bb){
return aa.id<bb.id;
}
inline void build(int u,int v,int w){
cnt++;
e[cnt].to=v;
e[cnt].val=w;
e[cnt].nxt=hd[u];
hd[u]=cnt;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
vis[i]=out[i]=0;
cin>>c[i]>>U;
if(c[i]>0)q.push(i),vis[i]=1;
else c[i]-=U;
}
for(int i=1;i<=m;i++){
cin>>u>>v>>w;
build(u,v,w);
out[u]=1;
}
while(!q.empty()){
h=q.front();
q.pop();
if(c[h]<=0)continue;
for(int i=hd[h];i;i=e[i].nxt){
t=e[i].to;
c[t]+=e[i].val*c[h];
if(!vis[t]){
q.push(t);
vis[t]=1;
}
}
}
for(int i=1;i<=n;i++)
if(!out[i]&&c[i]>0){
cout<<i<<' '<<c[i]<<'\n';
flag=1;
}
if(!flag){
cout<<"NULL";
return 0;
}
return 0;
}

浙公网安备 33010602011771号