- #include
- using namespace std;
- using VI = vector<int>;
- using ll = long long;
- using PII = pair <int , int>;
- const int mod = 998244353;
- ll n,p;
- ll u[110];
- ll c[210];
- ll out[110];
- ll in[110];
- vector
g[1010]; - int main(){
- cin>>n>>p;
- for(int i = 1 ; i <= n ; i++){
- cin>>c[i]>>u[i];
- }
- for(int i = 1 ; i <= p ; i++){
- int a,b,w;
- cin>>a>>b>>w;
- g[a].push_back({b,w});
- in[b]++;
- out[a]++;
-
- }
- queue<int> q;
- for(int i = 1 ; i <= n ; i++){
- if(in[i] == 0) q.push(i);
- }
- while(q.size()){
- auto x = q.front();
- q.pop();
- for(auto v: g[x]){
- c[v.first] += v.second * c[x];
- in[v.first] --;
- if(in[v.first] == 0){
- q.push(v.first);
- c[v.first] = max(0ll , c[v.first] - u[v.first]);
- }
- }
- }
- int flag = 0;
- for(int i = 1 ; i <= n ; i++){
- if(out[i] == 0 && c[i] > 0){
- flag = 1;
- cout<" "<
"\n"; - }
- }
- if(flag == 0) cout<<"NULL";
- }
小于0的贡献不传递,把小于0的贡献都当作0来计算